2010-03-31 4 views
1

안녕하세요. 저는 지난 몇 년 동안 웹 개발을 해왔지만 영원히 같은 느낌으로 Java 또는 C++을 작성하지 않았습니다. 필자는 이러한 언어를 반드시 사용할 필요는 없으므로 제안 할 내용이 전적으로 열려 있습니다. 어제 메일 링프 계정으로 가져 오기 위해 클라이언트가 전자 메일 목록을 받았습니다. 불행히도 Mailchimp는 파일을 읽을 수 없습니다. 이것은 텍스트 파일이지만 탭으로 구분되어 있다고는 생각하지 않습니다. (이 점이 나를 훨씬 쉽게 만들어줍니다.)파싱 파일/스크립트 작성에 도움이 필요합니다.

파일의 작은 부분이 여기에 볼 수 있습니다 (I는 이름과 이메일 주소를 마지막으로 변경 한) : http://sparktoignite.com/patients.txt

사람이 CSV 나는 메일 침프 읽을 수있는 형식으로이를 얻을 수있는 방법에 대한 제안을 (있는 경우 탭 delimited txt, excel) 알려주십시오. 3 년 전에는 몇 분 만에이 작업을 수행 할 수 있었지만 지난 몇 년 동안 RoR, PHP 및 jQuery 이외의 다른 요소를 다루지 않았기 때문에 어디에서인지 모릅니다. 시작한다.

감사합니다.

답변

0

기능은 탭으로 구분 된 파일을 출력합니다

cat patients.txt | tr -d [[:blank:]] | tr "|" "\t" > output.txt 

당신이 CSV를 선호하는 경우에, 다만 마지막 "\t"","에 변경 :

cat patients.txt | tr -d [[:blank:]] | tr "|" "\t" > output.txt 

를이 헤더를 엉망으로 만든다. 헤더를 유지해야하는 경우 처음 몇 줄을 건너 뛸 필요가 있습니다.

head -n2 > output.txt 
tail -n+3 | tr -d [[:blank:]] | tr "|" "\t" >> output.txt 
+0

굉장! 이것은 완벽하게 작동했습니다! 나는 bash 툴을 배우기 시작할 필요가있다. 감사! –

+0

또한 유효한 필드 값에 공백이 포함될 수 있으면이 옵션보다 조금 더 복잡해집니다. – pajton

+0

@bradley 쿨, 다행스럽게 도와 줬어! 공백에 대한 내 노트를 참조하십시오. – pajton

2

당신이 * nix에서 스크립트에있는 경우, 당신은 awk

awk -F"|" 'NR>2{$1=$1}1' OFS="," file > newfile.xls 

같은 도구를 사용할 수 있습니다, 그러나, 당신은 당신이 PHP를 알고 있다고 언급, 왜 당신이 알고있는 무언가에 충실하지. 당신이 사용할 수있는 fgetcsv()/fputcsv() 떠들썩한 파티에서

$output=fopen("out.csv","w"); 
$handle = fopen("file", "r"); 
if ($handle) { 
    $line=fgetcsv($handle, 2048, "|"); 
    $line=fgetcsv($handle, 2048, "|"); 
    while (($data = fgetcsv($handle, 2048, "|")) !== FALSE) { 
     $num = count($data); 
     fputcsv($output,$data,','); 
    } 
    fclose($handle); 
    fclose($output); 
} 
+0

굉장! nix 커맨드 라인 도구에 대해 더 많이 배워야합니다 ... 저는 수개월 동안 Mac에서만 사용 해왔고 모든 트릭을 배우지 못했습니다. –

관련 문제