2014-12-01 5 views
0

Я пытаюсь объединить набор .txt-файлов с помощью командной строки Windows в файл csv.объединение файлов .txt в файл csv с разделителем табуляции

так я использовать

type *.txt > me_new_file.csv 

но через поля данной строки, которая табуляции, заканчивается в одной колонке. Как использовать разделитель табуляции в исходном текстовом файле для создания файла csv, чтобы поля были правильно выровнены в столбцах, используя одну или несколько команд? Я думаю, что может быть что-то вроде ...

type *.txt > me_new_file.csv delim= ' ' 

но еще не удалось найти. Спасибо за помощь. Был бы также признателен, если бы кто-то мог направить меня к соответствующему ответу.

ответ

0

Из командной строки у вас будет довольно сложное время. Командный процессор Windows cmd.exe намного проще, чем тире, золе или bash, et.al.

Лучше всего было бы объединить все файлы в CSV-файл, откройте его в текстовом редакторе и сделать глобальный поиск и замену заменяя,

Будьте осторожны, чтобы ваши другие данные не в нем есть какие-то запятые.

0

Если исходные файлы ограничены табуляцией, то выходной файл также разделяется табуляцией. В зависимости от используемого программного обеспечения вы должны правильно загружать данные с разделителями табуляции.

Предположим, вы используете Excel. Если выходной файл имеет расширение .csv, тогда Excel по умолчанию будет разделять запятыми, когда он откроет файл. Конечно, это не сработает для вас. Но если вы переименуете файл, чтобы иметь какое-то другое расширение, например .txt, тогда, когда вы откроете его в Excel, он откроет серию диалоговых окон, где вы можете указать формат, включая разделитель табуляции.

Если вы хотите сохранить расширение .csv и Excel автоматически откроет его правильно, вам необходимо преобразовать данные. Это можно сделать очень легко с JREPL.BAT - a hybrid JScript/batch utility that performs a regular expression search and replace on text data. JREPL.BAT - это чистый скрипт, который запускается изначально на любом компьютере Windows с XP.

Следующие значения охватывают каждое значение в кавычках, на всякий случай, если значение содержит запятую.

type *.txt 2>nul | jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /o output.csv 


Осторожно: Использование type *.txt потерпит неудачу, если последняя строка в любом из источника .txt файлов не заканчивается с новой строки. В этом случае первая строка следующего файла будет добавлена ​​к последней строке предыдущего файла. Нехорошо.

Вы можете решить эту проблему, обработав каждый файл по отдельности в цикле FOR.

(for %F in (*.txt) do jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /f "%F") >output.csv 

Вышеупомянутый предназначен для запуска в командной строке. При использовании в пакетном сценарии, то необходимы несколько изменений:

(for %%F in (*.txt) do call jrepl "\t" "\q,\q" /x /jendln "$txt='\x22'+$txt+'\x22'" /f "%%F") >output.csv 


Примечание: Мой ответ не принимает ни один из исходных файлов содержат кавычки. Если они содержат кавычки, то требуется более сложный поиск и замена.Но с JREPL это можно сделать эффективно.

+0

Привет, спасибо за подробный ответ. Вчера я решил решить эту проблему, помогая коллегам. то, что мы сделали, было два шага. сначала конкатенировать файлы, как я писал в моем вопросе. затем замените вкладки запятой, которая, казалось, сделала трюк. Я напишу наше решение, где там позже. –

+0

@SasonTorosean - Если какой-либо из ваших исходных файлов с разделителями табуляции содержит запятые, вы получите неправильный результат, если вы просто замените вкладки запятыми. Вы должны приложить свои значения в кавычки, как мой ответ. – dbenham

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