Нужна помощь в разборе файла / написании скрипта - PullRequest
1 голос
/ 31 марта 2010

Привет всем, я занимался только веб-разработкой в ​​течение последних нескольких лет и никогда не писал ни Java, ни C ++, что кажется вечным. Мне не обязательно использовать эти языки, поэтому я полностью открыт для предложений. Вчера клиент получил список адресов электронной почты для импорта в свою учетную запись mailchimp, и, к сожалению, Mailchimp не смог прочитать файл. Это текстовый файл, но я не верю, что он разделен табуляцией (что сделало бы это намного проще для меня).

Небольшую часть файла (я изменил фамилии и адреса электронной почты) можно посмотреть здесь: http://sparktoignite.com/patients.txt

Если у кого-то есть предложения о том, как я могу получить это в удобочитаемом формате Mailchimp (csv, txt, excel с разделителями табуляции), пожалуйста, дайте мне знать. Я чувствую, что 3 года назад я мог бы сделать это за считанные минуты, но, учитывая, что я не затрагивал ничего, кроме RoR, PHP и jQuery в течение последних нескольких лет, я не знаю, где для начала.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

если вы используете * nix, вы можете использовать такие инструменты, как awk

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

однако вы заявили, что знаете PHP, так почему бы не придерживаться того, что вы знаете. Вы можете использовать fgetcsv () / fputcsv () function

$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 голосов
/ 31 марта 2010

В bash выводит файл с разделителем TAB:

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
...