2014-10-30 3 views
0

Мой списочныйдобавить столбец имя файла в файл Perl

1.csv 
2.csv 
3.csv 

Я пытаюсь захватить имя каждого файла в каталоге и распечатать его в файл coresponding в дополнительной колонке наряду с некоторым дополнительным текстом и столбцов.

TEST DATA

hello,josh,12345,2014-10-30 

КОД

my $directory = 'C:\directory'; 

opendir(DIR, $directory); 
my @files = readdir(DIR); 
closedir(DIR); 
foreach (@files) { 
    print $_, "\n"; 
} 
while (<>) { 
    #Do whatever here 
    print; 
} 

ЖЕЛАЕМЫЕ РЕЗУЛЬТАТЫ

  • 1.csv

    ID_1234,1.csv,Copmany,hello,josh,12345,2014-10-30 
    
  • 2.csv

    ID_1234,2.csv,Copmany,hello,josh,12345,2014-10-30 
    

ТЕКУЩИЕ РЕЗУЛЬТАТЫ

. 
.. 
1.csv 
2.csv 
3.csv 
hello,josh,12345,2014-10-30 

Я хотел бы также, чтобы выполнить этот один сценарий для всех файлов в директории ,

+0

Откуда 'ID_12 Выходят? –

+0

ID_1234 - дополнительная строка текста, которую я хочу связать с моим именем файла – JDE876

+0

после 'opendir', вы должны прочитать дважды и проигнорировать возвращаемое значение. Вы всегда будете получать '.' и' ..' в первом чтении. поэтому дважды читайте их, чтобы пропустить их, а затем введите цикл while для обработки фактических файлов. Или, как кто-то, несомненно, укажет на использование файла glob 'glob ('*. Csv') для шаблона совпадения файлов файлов для обработки. –

ответ

1

Использование Perl из командной строки,

perl -i~ -F, -lane "BEGIN{$, =','; @ARGV=glob pop} print 'ID_1234',$ARGV,'Copmany',@F" *.csv 

или

perl -i~ -pe "BEGIN{ @ARGV=glob pop} s|^|ID_1234,$ARGV,Copmany,|" *.csv 

или

local $^I = "~"; 
local @ARGV = glob("C:\\directory\\*.csv"); 

while (<>) { 
    s|^|ID_1234,$ARGV,Copmany,|; 
    print; 
} 
+0

Как добавить это в программу и реализовать в цикле while? – JDE876

+0

Я пошел с ответом @mpapec, поэтому я мог использовать ARGV в качестве хранимой переменной. Это сработало чудеса! Однако вместо регулярного выражения, выложенного выше |^| ID_1234, $ ARGV, Copmany, |; ', у меня было одно из полей join = ARGV, то есть $ flds [??] = $ ARGV; Для дополнительного текста я сделал пару фиктивных столбцов. То есть $ flds [??] = ~ s /^.*?$/ ID_1234 /; и $ flds [??] = ~ s /^.*?$/ Company /; Затем вы можете присоединиться к полям для создания этой строки текста. Еще раз спасибо! – JDE876

0

как насчет:

my $directory = 'C:\directory'; 

opendir(DIR, $directory); 
my @files = readdir(DIR); 
closedir(DIR); 
foreach (@files) { 
    print qq(ID_1234,$_,Copmany,hello,josh,12345,2014-10-30\n); 
} 
Смежные вопросы