Я новичок в PERL, и я пытаюсь взять файл (это на самом деле .idx
файл), который отформатирован как этотКак написать каждую строку текстового файла в строку CSV
Monday Foo Name 43212
Tuesday Name Foo Foo 43252
Tuesday Name 50322
Wednesday Foo Name 53221
Thursday Foo Bar Foo Name 24353
и I хотите вывести его как файл csv. Файл должен выглядеть так же, как в CSV-формате, чтобы Excel мог его прочитать. Кроме того, я хочу, чтобы строки, которые во вторник должны быть включены, чтобы файл CSV будет выглядеть
Tuesday Name Foo Foo 43252
Tuesday Name 50322
В Excel только. У меня также есть несколько файлов idx
в формате formYYYY_Q.idx
, где YYYY
относится к году и Q
относится к кварталу. Я хотел бы перебрать все файлы .idx
, которые у меня есть, и создать один большой CSV-файл с только строками в каждом файле .idx
с Tuesday
в начале. Код, который я до сих пор является
#!/usr/bin/perl
use warnings;
use strict;
use Text::CSV;
my $csvfile= Text::CSV->new({binary=>1,auto_diag=>1});
$csvfile->column_names("Day","Name","Number");
my @datalines;
my $idxfile="form1994_1.idx";
open(INFILE, "< $idxfile") or die $!;
open(my $outfile, "> Master.csv") or die $!;
while(<INFILE>){
if(/^Tuesday/){
chomp($_);
push(@nsarlines, $_);
}
}
Когда я заменить открытую команду с open(OUTFILE, "> Master.txt") or die $!;
и включить это в последней строке кода за пределами время цикла:
print OUTFILE map {"$_ \n"} @nsarlines;
файл Master.txt выглядит внешний вид как я хочу, чтобы
Tuesday Name Foo Foo 43252
Tuesday Name 50322
Однако, если я использую открытую команду, как написано выше делать что-то подобное вне времени цикла:
$csvfile-> print($outfile, \@test);
Я получаю CSV файл со всей $_
строки, которая одна строка .idx
файла в каждой ячейке файла Master.csv. Мне трудно понять, как сделать perl make каждый из .idx
строк CSV строки WIHTOUT вручную, вставляя запятые в $_
(не элегантный или желательный вариант).
Второе, что мне нужно сделать, это иметь файлы formYYY_Q.idx
все в одном каталоге, и я хотел бы автоматически пройти через каждый, вытащить строки, которые начинаются со вторника, и добавить их в файл Master.csv (или, скорее, все это и напишите файл Master.csv один раз в конце). Думаю, File::Find
может это сделать, но я не смог понять, как его использовать.
Благодарим за помощь.
Почему вы не хотите вставлять запятые? csv - это аббревиатура Comma Separated Values. Вы можете сделать это легко с помощью 'split/\ s + /' и 'join ',' '. Я буду честен, я не вижу причины использовать модуль для записи файлов csv. Чтение, да. Письмо, нет. –
@avitevet В фактическом файле есть переменные 'Fooname' разных слов. Это может быть «Company Foofirm», а другой может быть «Hold Foofirm Parters». Если я использую 'split/\ s + /', он поместит запятую во всю область, в моих данных будет пробел. Так что я получу во вторник, Холдинг, Foofirm, Partners, 43252, а не во вторник, Холдинг Foofirm Partners, 43252 ". И нет регулярной единой картины того, сколько слов составляют название компании. –
Если вы не хотите обрабатывать свои строки, но просто перепечатывайте их, вы должны просто использовать grep: 'grep"^Tuesday "form1994_1.idx' – TLP