2014-01-08 5 views
0

Tay :: Array :: CSV로 만든 약 .000 줄 길이의 .csv 파일이 두 개 있습니다. 이제 저는 매일 각각 한 줄 또는 두 줄을 추가하고 싶습니다. 가장 효율적인 방법은 무엇입니까?perl을 사용하여 CSV 파일에 행을 추가하는 방법

각 파일을 배열로 읽고 데이터를 추가하고 배열을 CSV에 다시 기록 할 수 있다고 가정합니다. 그러나이 경우 덮어 쓰는 동안 문제가 발생하면 모든 데이터가 손실 될 수 있으며 새 파일을 만들면 매일 겹쳐 쌓인 모든 복사본을 자동으로 관리하는 시스템을 찾아야합니다.

줄을 추가 할 모듈이 없다면 문제없이 perl로 다시 읽을 수 있도록 적절한 CSV에 필요한 모든 규칙과 이스케이프 문자를 사용하여 수동으로 수행하는 방법은 무엇입니까? 답변에 대한

...

덕분에, 내가 직접 그래서 원래의 질문을 eidted 답변에 의견을 추가 할 수있는 충분한 명성을 필요가 없습니다.

데이터를 너무 많이 잃어 버릴 염려가 없습니다. 처음부터 다시 구축 할 수는 있지만 시간과 수동 작업이 필요하지만 일일 백업 시스템을 실행할 필요는 없습니다. 항상 고려해야 할 사항입니다. 디스크에 .csv를 쓰는 것이 내 컴퓨터에서 상대적으로 느리기 때문에 줄을 추가하는 것이 처리 시간에 더 쉬워야합니다.

추가 모드에서 파일을 여는 것은 내가 모르는 것입니다. $csv->print($fh, $row);을 포함하는 솔루션은 둘 이상의 회선을 추가하기 위해 루프를 통해이를 실행해야합니까?

나는 다른 해결책은 것 일 더 Perlmonks

use Tie::Array::CSV; 
my $filename = 'tied.csv'; 
tie my @file, 'Tie::Array::CSV', $filename; 
push(@file,[4,5,6]); 
untie @file; 

에 제안 주 잖아? 나는 지금 그것을 시험 할 기회가 없다.

EDIT. 일하는 마법 위에 푸시() 솔루션. 이것을 고려해보십시오.

+0

데이터 손실에 대해 걱정이된다면 백업에 투자하십시오. –

+0

'perldoc -f open'에서 다음과 같은 텍스트 :'MODE가 >>이면, 파일은 추가를 위해 열리고 필요하다면 다시 생성됩니다 .' –

답변

7

사용 Text::CSV :

use Text::CSV; 

my $csv = Text::CSV->new({ binary => 1, auto_diag => 1, eol => "\n"}) 
     or die "Cannot use CSV: " . Text::CSV->error_diag(); 

# open in append mode 
open my $fh, ">>", "file.csv" or die "Failed to open file: $!"; 

$csv->print($fh, [ "foo", "bar", "foo,bar" ]); 

close $fh; 

이 필드 주위에 하나의 필드 분리로 EOL 문자 쉼표 (기본값)로 \n를 사용 file.csv에 라인, 따옴표를 추가 포함 쉼표 :

foo,bar,"foo,bar" 
관련 문제