WebStorm

Рейтинг
161
Регистрация
01.11.2008
chaturanga #:

Я не про скорость в данном случае (хотя и про неё тоже), а про дальнейшее сопровождение кода и то, что регулярки - это самый простой способ выстрелить себе в ногу.

В любом случае сплиты и т.п. существенно быстрее, надёжнее и читабельнее.

Я лет 15 назад админил большой проект с 1000+ разных сайтов и их конфиги nginx хранились в виде файлов. Довольно часто в них нужно было вносить групповые правки. Вместо того чтобы сделать систему для хранения конфигов в БД и формировать их при необходимости я их "правил" регулярками с помощью grep, sed и awk. 6 лет это всё обрастало дикими regexp'ами c Backreferences, POSIX-классами и разными вариациями Extended- и PCRE- синтаксисов. И когда пришло время передать это другому админу, я понял, что и сам давно не понимаю как это работает.

С тех пор у меня от них глаз дёргается :)

с этим не поспоришь, то, что делал несколько лет назад забываешь намертво, если не работаешь регулярно, приходится вникать и разбираться, регулярки для ленивых)))
dejanews #:

Ну отключить могут в любой момент, че каждый день трястись?

кстати в китайской версии сайта банка Zhejiang Chouzhou Commercial Bank   czcb.com.cn/czcb/gjyw/zyhwdlx/index.html для USD у них указан американский банк корреспондент, Bank of America National Association New York,USA   BOFAUS3N

dejanews #:

Усбагоился наконец?

пока каждый лично сам не проверит, то не "узбагоетца"
Sergey2121 #:

Пришли только что! Обменял по курсу 89, 55 р за долл.

поздравляю, а то я  уже совсем отчаялся, ни одного банка рабочего не осталось
chaturanga #:

Поймите - это всё из области ненормального программирования. Регулярки - это зло. Стремитесь от них избавиться везде, где есть возможность.

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте ©

я то думал, что там за точки, а это просто пробелы так сайт подсвечивает, да, вам удалось оптимизировать лучше, единственное, что 14 наверное будет маловато, можно с запасом поставить 34:

(?<=[:;]) *(?:[A-Z][A-Za-z .]{1,34}[, ]*){1,3}(?=[;.])

на счёт того, что это не оптимально, не соглашусь, я думаю ТС будет обрабатывать на бэкенде, а не налету, а раз так, то и особо заморачиваться со скоростью работы не стоит, главное, чтобы помогало в работе

Sly32 #:
а можно сделать так чтоб не более  3-х слов попадало и только если  кэпитал леттер?
https://regex101.com/r/WZca81/1
dmitry4794884948 #:

7.07 указал реквизиты. 8.07 отправили перевод. 11.07 перевод не удался и деньги вернулись.

Банк посредник:

Zhejiang Chouzhou Commercial Bank

CZCBCN2X

Почему вывод на КЕБ не будет работать?

потому что по правилам адсенса вывод доступен только на банки, у которых есть посредник (корреспондент) в сша, у китайского Zhejiang Chouzhou Commercial Bank его похоже нет, вот тут тоже пишут, что ничего не приходит на КЕБ: https://gamedev.ru/industry/forum/?id=267528&page=172

(172 страница)

тут один товарищ с ником "dejanews" всем говорил "усбагойтесь", когда писали про то, что вывод на КЕБ не будет работать, а теперь что-то притих

так более оптимально, можно записывать не с какого по какой байт, а с какого байта и длину (C - до 256):

$f1 = fopen(__DIR__ . '/person_index.bin','wb+');
$f2 = fopen(__DIR__ . '/person_data.bin','wb+');
$from = 0;
for($i=0;$i<=$max;$i++)
{
        if(isset($data[$i]))
        {
                $len=strlen($data[$i]);
                fwrite($f1, pack('N', $from ).pack('C', $len ));
                fwrite($f2, $data[$i]);
                $from+= $len;
        }
        else
        {
                fwrite($f1, pack('N', 0 ).pack('N', 0 ));
        }
}
fclose($f1);
fclose($f2);

а чтобы прочитать потом по идешнику $id, умножаем $id на 5 (N 4 байта + C 1 байт), читаем индекс с нужного места, 5 байт, определяем с какого байта надо читать датафайл и длину и читаем

ps: при использовании N - максимальный размер датафайла с данными, около 4 гигов

lutskboy #:

хорошая идея. взял на заметку.

fwrite($f, pack('a'. $maxnamelen , $data[$i] )); а вот эта штуковина не раздует слишком файл?

если например имя одно 3 символа. а другое 32. то он забьет чем эти пространства? дополнит 3 до 32 чем? 

надо попробовать

дополнит нулл байтами, раздует, но итоговая база вряд ли будет какой-то очень большой, как другой рабочий вариант, если боитесь, что не хватит места на хостинге - подготовьте два датафайла:

- один из них будет индексом, в нём будут идешниками номера записей, а значениями, с какого по какой байт во втором датафайле находится содержимое

- второй - собственно содержимое, подряд, можно даже не паковать его, а просто подряд записывать

$f1 = fopen(__DIR__ . '/person_index.bin','wb+');
$f2 = fopen(__DIR__ . '/person_data.bin','wb+');
$from = 0;
for($i=0;$i<=$max;$i++)
{
        if(isset($data[$i]))
        {
                $to=$from+strlen($data[$i]);
                fwrite($f1, pack('N', $from ).pack('N', $to ));
                fwrite($f2, $data[$i]);
                $from = $to;
        }
        else
        {
                fwrite($f1, pack('N', 0 ).pack('N', 0 ));
        }
}
fclose($f1);
fclose($f2);
Всего: 590