2013-06-12 3 views
0

У меня есть txt-файл, в котором содержится много информации. Я хочу прочитать и сохранить только часть статуса.Прочтите определенную часть файла txt для каждой строки

Пример:

id........username...... status......language .......image 

11111 abcdefg Man Utd won for the second time ENG img1244 

11112 abcdaaa Man Utd won for the third time ENG img1245 

11113 abcdbbb Man Utd won for the fourth time ENG img1246 

11114 abcdccc Man Utd won for the fifth time ENG img1247 

11115 abcdddd Man Utd won for the sixth time ENG img1248 

And what I should obtain is the following 

Man Utd won for the second time 

Man Utd won for the third time 

Man Utd won for the fourth time 

Man Utd won for the fifth time 

Man Utd won for the sixth time 

То, что я хочу сделать, это хранить строковые данные пользователя в строку «ENG».

Благодарим за помощь.

ответ

0

Вы можете сделать это с помощью простого скрипта perl. Для окон perl можно загрузить с activestate. В Linux обычно уже установлен perl.

Применение:

  1. установить (или уже есть) Perl
  2. скопируйте приведенный ниже сценарий в текстовый файл
  3. Сохраните файл, используя простое имя по вашему выбору с расширением .pl (например: parser.pl)
  4. Сохраните исходный файл в том же каталоге и назовите его «input.txt»
  5. Из ЦМД окна выполнения: Perl parser.pl
  6. Результаты сценария будут созданы в файле с именем 'output.txt' (в том же каталоге), и если файл существует, он будет перезаписан.

Сценарий предполагает, что:

  1. текст Ваш поиск начинается с парнем или с девушкой
  2. текст ENG не появляется в тексте, которого вы ищете, только в конце.
  3. Язык текста всегда ENG. Если не заменить ЭСН с: по линии 18

Сценарий (ENG | Разное1 | | Разное2 ETC?):

/USR/местные/бен/Perl

использование строги;

unless(open(INFILE, "input.txt")){ 
    print "Unable to open input file input.txt for reading, possible reason: $!\n"; 
    exit; 
}; 

unless(open(OUTFILE, ">output.txt")){ 
    print "Unable to open output file output.txt for writing, possible reason: $!\n"; 
    exit; 
}; 

my $x = 1; 
foreach my $line (<INFILE>){ 
    print "$line"; 
    if($line =~ /((?:Wom|M)an.*) ENG/){ 
     print OUTFILE $1."\n"; 
    }else{ 
     print "No match found on line $x\n"; 
    } 
    $x++; 
} 

close(INFILE); 
close(OUTFILE); 
exit; 
+0

Благодарим вас за ответ и помощь, но что, если у меня нет фиксированного предложения о приеме, такого как «Человек» или «Женщина»? Он отличается от каждой строки, и все, что я знаю, - это имена пользователей, заканчивающиеся номером (0-9). Это как: 11111 abcdef9 Man Utd выиграл второй раз ENG img1244 –

+0

Сценарий, который я придумал, не заботится ни о чем перед частью «Человек или женщина» и будет работать для всех примеров синтаксиса текста, которые у вас есть данный. Запустите его против своего фактического файла и сообщите мне, как он работает. – Drew

+0

Хорошо, я решил свою проблему. Огромное спасибо. –