2010-03-31 2 views
1

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

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

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

Спасибо!

ответ

0

В Баш, выводит 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 
+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 всего несколько месяцев и не узнал все трюки. –

Смежные вопросы