Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Perl чтение из файла по словам


Автор: TOXA23 6.2.2006, 21:46
У меня есть некоторый фаил «category.txt»
помогите сделать чтобы скипт читал не по целым строкам, а по словам (между слов раздилитель «|») тоесть:
в файле «category.txt»:
soft|софт
comp|компьютор
web|интерне
вывести:
soft софт
comp компьютор
web интерне

вот мой скрипт который читает из файла «category.txt» по строкам:

Код

open(CATFILE, "category.txt") || &errorcode(__FILE__, __LINE__, "category.txt", "$!", "print", "FILE OPEN ERROR", "1");
while (<CATFILE>)
{
      chomp $_;
      chop $_;
      $dcat = $_;
      $dcat =~ s/_/ /g;

       print “$dcat”
}
close (CATFILE);

Автор: korob2001 6.2.2006, 22:08
Разбивай строку по символу разделителю:
Код

open(CATFILE, "< category.txt") || &errorcode(__FILE__, __LINE__, "category.txt", "$!", "print", "FILE OPEN ERROR", "1");
while (<CATFILE>) {
          chomp;
          s/_/ /g;
          my($first, $second) = split(/\|/);
          print "$first => $second\n";
}
close (CATFILE);

Если нужно обрезать конец строки, то достаточно одного chomp, chop не нужен. Если chomp не передана переменная, то будет удалён символ пееревода строки из переменной $_, потому её указывать не обязательно, тоже самое касается и split, а так же поиска по шаблону с подстановкой.

Модератор: Для вставки кода, пользуйся кнопкой КОД, из выпадающего списка выбери тот язык, код которого ты вставляешь. После чего код не будет терять форматирование, а так же будет подсвечен.

Автор: Kiber_rat 7.2.2006, 09:56
Вот тебе еще вариант smile
Код
open FH, "< $ARGV[0]" or die "Can't open $ARGV[0], $!\n";
print join " ", split /\|/,$_ while <FH>;

И еще пару примеров, для "закрепления" smile
Код
open FH, "< file.txt" or die "Can't open file, $!\n";
print join "\n", split /\b/, $_ while <FH>;
или так еще можно, что бы отсеять не буквы/цифры
Код
open FH, "< file.txt" or die "Can't open file, $!\n";
print join "\n", grep /[_a-zA-Z0-9]/, split /\b/, $_ while <FH>;

Автор: MaxPayne 7.2.2006, 11:05
Я делал раньше так:

Код

open (L,"log.txt");
while (<L>)
{
($name,$name2) = split(/\|/,$_);
print "<font color=0080C0><b>$name</b>:</font> $name2<br>";
}
close(L);

Автор: tishaishii 14.2.2006, 01:54
Код
($/, $\)=('|', "\n");
my$fh;
open $fh, '<'.$file_name;
chomp, print while <$fh>;
close $fh;


$/ - разделитель для чтения файлов.
$\ - используется при выводе с помощью "print".
Код
($,, $\)=(' ', "\n");
print /^\s*(.*?)\s*\|\s*(.*?)[\r\n]/ while <>;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)