Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

кодировка

0 views
Skip to first unread message

Mikhail Stakhanov

unread,
Apr 9, 2019, 1:39:58 AM4/9/19
to
Здравствуйте, All!

ПОМОГИТЕ!!!
Целый вечер провел! Не понимаю:
Linux, UTF8, Linux раздел.
Получаю .req c виндового binkp на qico 0.57xe
внутри use utf8;
хоть убей не понимаю:
@files читаю из созданного qico qsrif.UID (в какой кодировке ?)
Открываю файл он у меня создан данным скриптом.
Сравниваю строку $current из файла и $files[$i] и не выходит каменный цветок!
if ($current =~ /$files[$i]/i) не работает! все буквы и так маленькие и все
английские.

Что я делаю не так ?

И qico виснет на 100% после чтения файла...
при том в логе /usr/sbin/strif.pl /tmp/qsrif.*** exit_code=0! (Он отрабатывает
до конца).

Когда я ставил заглушку типа, что не попроси всеравно отдам test.msg, все
работало.

Что я делаю не так ? Весь вечер сидел! в винде все работает!



Всего наилучшего, Mikhail

Eugene Grosbein

unread,
Apr 9, 2019, 4:34:59 AM4/9/19
to
09 апр. 2019, вторник, в 00:14 NOVT, Mikhail Stakhanov написал(а):

MS> ПОМОГИТЕ!!!
MS> Целый вечер провел! Hе понимаю:
MS> Linux, UTF8, Linux раздел.
MS> Получаю .req c виндового binkp на qico 0.57xe
MS> внутри use utf8;
MS> хоть убей не понимаю:
MS> @files читаю из созданного qico qsrif.UID (в какой кодировке ?)
MS> Открываю файл он у меня создан данным скриптом.
MS> Сравниваю строку $current из файла и $files[$i] и не выходит каменный
MS> цветок!
MS> if ($current =~ /$files[$i]/i) не работает! все буквы и так маленькие
MS> и все
MS> английские.
MS> Что я делаю не так ?

Hе надо так сравнивать строки. Внутри $files[$i] могут быть
спец-символы, которые кардинально меняют смысл или вообще
делают регулярку некорректной. Есть же простой оператор сравнения
строк: if ($current eq $files[$i])

Eugene
--
Hароду - чтоб не вздумал бунтовать! -
Мы тоже разрешили воровать.
Пусть лучше сам ворует потихоньку,
Чем с воровскою властью враждовать!..

Mikhail Stakhanov

unread,
Apr 9, 2019, 2:34:58 PM4/9/19
to
Здравствуйте, Eugene!

Ответ на сообщение Eugene Grosbein (2:5006/1) к Mikhail Stakhanov,
написанное 09 апр 19 в 16:19:
EG> строк: if ($current eq $files[$i])
Да это работает!
НО! $files[$i] - это считанный шаблон, и вот эти преобразования давали маску
поиска:
Под актив перл все работает:
for (my $i = 0; $i < scalar(@files); $i++) {
($parts[0], $parts[1]) = ($1,$2) if ($files[$i] =~ /^(.{1})(.*)/);
open FFile, "<", "$index_dir"."str_"."$parts[0]".".idx" or die "ssf";
<<- открываем файл на начальную букву запроса, если первый символ ? или *, то
печалька, пока не реализуем :)
%dirs = read_config("$index_dir"."dirs.lst");
my $d_found = ();
my $current = ();
$files[$i] =~ s/\./\\.{1}/g if ($files[$i] =~ /\./);
$files[$i] =~ s/\?/\.{1}/g if ($files[$i] =~ /\?/);
$files[$i] =~ s/\*/\.\*/g if ($files[$i] =~ /\*/);
while (<FFile>) {
if ($_ =~ /^$files[$i]/i) { <<- Вот это место, (файл) (индекс
каталога) формат файла.
($current) = $_ =~ /^(.*?)\s/i;
($d_found) = $_ =~ /\s(.*)$/i;
foreach my $key (sort keys %dirs) {
if ($dirs{$key} == $d_found) { <<- %dirs = { [путь]
=> [номер] }
$files_found[$j] = $key."/".$current;
}
}
print "$files_found[$j]";
$j++;
}
}
close FFile;
}

if $current eq $files[$i] этого не даст.
Как решить данный вопрос ?

Всего наилучшего, Mikhail

Eugene Grosbein

unread,
Apr 9, 2019, 5:14:58 PM4/9/19
to
09 апр. 2019, вторник, в 19:30 NOVT, Mikhail Stakhanov написал(а):

MS> if ($_ =~ /^$files[$i]/i) { <<- Вот это место, (файл)
MS> (индекс
MS> каталога) формат файла.

[skip]

MS> Как решить данный вопрос ?

Hевозможно сказать, почему не матчит, не зная что там у тебя за данные.
Вставь непосредственно перед этим if отладочный вывод:

print STDERR "debug: trying to match '$_' against '$files[$i]'\n";

И смотри, что с чем реально сравнивается.

Eugene
--
Hаучить не кланяться авторитетам, а исследовать их и сравнивать их поучения
с жизнью. Hаучить настороженно относиться к опыту бывалых людей, потому что
жизнь меняется необычайно быстро.

Mikhail Stakhanov

unread,
Apr 10, 2019, 1:04:59 AM4/10/19
to
Здравствуйте, Mikhail!

Ответ на сообщение Mikhail Stakhanov (2:5020/932.1) к Eugene Grosbein,
написанное 09 апр 19 в 21:30:
MS> Под актив перл все работает:
MS> for (my $i = 0; $i < scalar(@files); $i++) {
MS> ($parts[0], $parts[1]) = ($1,$2) if ($files[$i] =~
MS> /^(.{1})(.*)/);
MS> open FFile, "<", "$index_dir"."str_"."$parts[0]".".idx" or die
MS> "ssf"; <<- открываем файл на начальную букву запроса, если первый
MS> символ ? или *, то печалька, пока не реализуем :)
MS> %dirs = read_config("$index_dir"."dirs.lst");
MS> my $d_found = ();
MS> my $current = ();
MS> $files[$i] =~ s/\./\\.{1}/g if ($files[$i] =~ /\./);
MS> $files[$i] =~ s/\?/\.{1}/g if ($files[$i] =~ /\?/);
MS> $files[$i] =~ s/\*/\.\*/g if ($files[$i] =~ /\*/);
MS> while (<FFile>) {
MS> if ($_ =~ /^$files[$i]/i) { <<- Вот это место, (файл)
MS> (индекс каталога) формат файла.
MS> ($current) = $_ =~ /^(.*?)\s/i;
MS> ($d_found) = $_ =~ /\s(.*)$/i;
MS> foreach my $key (sort keys %dirs) {
MS> if ($dirs{$key} == $d_found) { <<- %dirs =
MS> { [путь] => [номер] }
MS> $files_found[$j] =
MS> $key."/".$current;
MS> }
MS> }
MS> print "$files_found[$j]";
MS> $j++;
MS> }
MS> }
MS> close FFile;
MS> }
поймал ошибку z2daily.093 != z2daily.093 т.к. "." любой произвольный символ и
он должен иметь модификатор ? (правильно ?) и соответственно z2daily[Любой
символ]093 должно подходить под z2daily.{1}093, но если мы делаем
z2daily\.{1}093 в files[$i] то работает.
Так ?

Всего наилучшего, Mikhail

Eugene Grosbein

unread,
Apr 10, 2019, 1:34:59 AM4/10/19
to
09 апр. 2019, вторник, в 20:24 NOVT, Mikhail Stakhanov написал(а):

MS> поймал ошибку z2daily.093 != z2daily.093 т.к. "." любой произвольный
MS> символ и
MS> он должен иметь модификатор ? (правильно ?)

Знак вопроса для точки означает необязательность, он тут незачем.

MS> и соответственно z2daily[Любой
MS> символ]093 должно подходить под z2daily.{1}093, но если мы делаем
MS> z2daily\.{1}093 в files[$i] то работает.
MS> Так ?

$ perl -e 'print "yes\n" if "z2daily.093" =~ /z2daily.093/;'
yes

Hе нужно добавлять {1}.

Eugene
0 new messages