2014-01-08 2 views
0

하이 펄에 두 개의 CSV 파일을 결합하고 나는 그것을 저 작은 지식을 가지고하지만 난 새내가 펄 매우 새로 온

#!/usr/bin/env perl 
use strict; 
use warnings; 
use Text::CSV_XS; 

my @rows; 
{ # Read the CSV file 
    my $csv = Text::CSV_XS->new() or die "Cannot use Text::CSV_XS ($!)"; 
    my $file = "file.csv"; 
    open my $fh, '<', $file or die "Cannot open $file ($!)"; 
    while (my $row = $csv->getline($fh)) { 
     push @rows, $row; 
    } 
    $csv->eof or $csv->error_diag(); 
    close $fh or die "Failed to close $file ($!)"; 
} 

{ # Gather the data 
    foreach my $row (@rows) { 
     foreach my $col (@{$row}) { 
      $col = uc($col); 
     } 
     print "\n"; 
    } 
} 
# (over)Write the data 
# Needs to be changed to ADD data 
{ 
    my $csv = Text::CSV_XS->new({ binary => 1, escape_char => undef }) 
     or die "Cannot use Text::CSV ($!)"; 
    my $file = "output.csv"; 
    open my $fh, '>', $file or die "Cannot open $file ($!)"; 
    $csv->eol("\n"); 
    foreach my $row (@rows) { 
     $csv->print($fh, \@{$row}) or die "Failed to write $file ($!)"; 
    } 
    close $fh or die "Failed to close $file ($!)"; 
} 
에 두 .CSV 파일을 conbines 스크립트를 만들려고 해요

이 내가 쓰기를 통해이 데이터가 실제로 새 파일을 추가하는 insted 알고 할 내 현재 코드 그러나 이것은 내가 펄에있어 제한된 시간과 지식을 얻을 수 있었다 얼마나 멀리

두 파일의 CSV 형식은 동일합니다.

open my $fh, '>>', $file 
    or die "Cannot open $file ($!)"; 

>> 파일을 열어야합니다 APPEND에 대한 $fh을 처리 : 내가 제대로 내 펄을 기억한다면

open my $fh, '>', $file 
    or die "Cannot open $file ($!)"; 

라인 읽어야합니다

"Header1";"Header2";"Header3";"Header4";"Header5" 
"Data1";"Data2";"Data3";"Data4";"Data5" 
"Data1";"Data2";"Data3";"Data4";"Data5" 
"Data1";"Data2";"Data3";"Data4";"Data5" 
"Data1";"Data2";"Data3";"Data4";"Data5" 
"Data1";"Data2";"Data3";"Data4";"Data5" 
+0

뭔가를 시도 할 수 있습니다. 그것들은 같은 열을 가지고 있고, 다른 하나의 행을 연결하기를 원합니까? (기본적으로 두 번째 파일의 머리글을 벗겨냅니다.) 행은 같지만 열이 다르며 열을 추가하고 싶습니까? 당신은 무엇부터 시작합니까? 그리고 당신은 무엇을 끝내고 싶습니까? 셸 수준 명령으로이 작업을 수행 할 수도 있습니다 (자체 프로그램을 작성할 필요가 없음). –

+0

그들은 모두 동일한 헤더와 동일한 행과 열을 가지고 있습니다. 이것은 매월 반복되는 것입니다. 프로그램에서 CSV 파일을 추출하고 자동으로 추가해야합니다. – Brein

+2

'cat file1 file2> file3' 파일을 연결 하시겠습니까? – TLP

답변

0

나는 문제가 여기에있다 생각 덮어 쓰기 대신.

+0

감사합니다. – Brein

+2

당신이 제공 한 코드는 "하드 코드 된"파일을 하나만 받아서 새로운 파일 인'output.csv '로 출력합니다. 물론, 당신이 이미'output.csv'에 당신이 당신의 질문에서 밝히지 않은 것을 썼다면 말입니다. – TLP

+0

@TLP : 부모 블록에서'$ fh' (내가 대상 파일로 사용했던)를 열어 준 답안을 다시 작성하고 그 안에 하드 코딩 된 입력 파일을 다시 작성했습니다. 원래 코드는 필요한 것보다 더 많은 범위가있는 것으로 보입니다. 그러나 변경 사항을 제출하기 전에 @Brein이 내 대답을 수락했습니다. 그래서, 나는 옳다. 그리고 너는 옳고 모든 것이 정확하다. :) –

0

당신은 "결합이 개 CSV 파일을"정의이

opendir(hand,"DIRPATH"); 
@files = readdir(hand); 
closedir(hand); 

foreach(@files){ 
       if(/\.csv$/i) {                 #if the filename has .csv at the end 
          push(@csvfiles,$_); 
           } 
       } 

foreach(@csvfiles) { 
        $csvfile=$_; 
        open(hanr,"DIRPATH".$csvfile)or die"error $!\n";      #read handler 
        open(hanw , ">>DIRPATH"."outputfile.csv") or die"error $! \n";   #write handler for creating new sorted files 
        @lines=(); 
        @lines=<hanr>; 

     foreach $line (@lines){ 
           chomp $line; 
           $count++; 
           next unless $count;            # skip header i.e the first line containing stock details 
           print hanw join $line,"\n"; 
           } 

     $count= -1; 
     close(hanw); 
     close(hanr); 
        }` 
관련 문제