![]() |
поиск и добавление текста в файл с условием
В продолжение этой темы
Есть папка с различными файлами, из которой запускается батник, преобразующий кодировку файлов *.txt и *.csv из этой папки и после выполняющий программу конвертируя их в файлы *.kml Нужно: 1. добавить проверку: если в начале файла есть строка Name,Latitude,Longitude,Description или Name;Latitude;Longitude;Description не добавлять ее в файл. Если нет определить какой разделитель в файле "," или ";" и добавить в начало файла строку Name,Latitude,Longitude,Description с соответстующим разделителем. 2. Проверить код на универсальность, если есть грубые ляпы убрать их. Заранее спасибо. Файлы могут быть следующего вида Код:
Name,Latitude,Longitude,Description Код:
Name;Latitude;Longitude;Description Сам батник: Код:
@Echo on Пробовал команду: Код:
@type "%~dp0\utf8\test2.txt" | find /i "Name,Latitude,Longitude,Description" >nul && exit |
Цитата:
|
Sta1917,
в вашей предыдущей теме в п4 я давал пример как сделать запись в файл первой строкой. |
Я слегка запутался в Вашей постановке, что в каком порядке надо делать.
У меня: 1. Файл анализируется на заголовок, если надо, заголовок добавляется. Результат - промежуточный файл. 2. Промежуточный файл перекодируется в UTF-8. Результат - исходный дополненный перекодированный файл. Перекодировка мной не отлаживалась - нечем и не на чем. 3. Модифицированный исходный конвертируется. Конвертация мной не отлаживалась - нечем и не на чем. 4. Промежуточный файл удаляем. Код:
@Echo Off Цитата:
|
Цитата:
|
megaloman, Спасибо, работает. Если сконвертировать его второй раз, получаются крокозябры. Можно чтобы конвертировались промежуточные файлы, либо была проверка на кодировку?
Объясните пожалуйста как добавить другие варианты заголовка и разделителя (табуляции). чтобы код работал? Цитата:
|
Sta1917, У меня есть твёрдое убеждение: исходные файлы, какие бы они ни были, изменять НИЗЗЗЬЯ!! Но Вы моих убеждений, похоже, не разделяете. :)
Я бы организовал всё по другому. 1. Новые исходные файлы помещал бы в отдельную папку, например Box_In. 2. Обработанные по полной программе файлы помещал бы тоже в другую папку, например, Box_Out 3. Обработанные исходные перемещал бы в папку, например, Box_Arc Еще одно моё убеждение, если не продумать организацию системы, то обеспечен постоянный головняк. Когда-то меня натыркивали носом: не бросайся писать код, проработай алгоритм задачи. Если Вас привлечёт мой подход к реализации, могу изваять вариант. |
megaloman, всецело поддерживаю!
|
Sta1917,
Здесь вариант, где я постарался по максимуму учесть Ваши пожелания
Код:
@Echo Off Здесь пояснения к этому варианту
Мысли по организации процесса: В параметре Where должна быть прописана папка, где расположены данные, распределённые по папкам: Box_In, Box_Out, Box_Arc. Если строка пустая, как сейчас в примере, то подразумевается, что эти папки расположены в той же папке, что и батник. Если батник запускается без параметров, то исходные данные берутся из Box_In. Шаблоны обрабатываемых файлов задаются в параметре Files. Если в параметрах имена файлов, то обрабатываются они. В частности, если на рабочем столе создать значок со ссылкой на батник, а затем пометить в папке с данными несколько файлов (не более 9!) и затянуть их на этот значок, то обработаются помеченные файлы. Результаты - в подпапке Box_Out указанной папки в параметре Where. Данные из исходного места перемещаются в Box_Arc. Исходные данные не изменяются. Разделители: Список разрешенных задаётся строкой параметра Delim. Разделитель из нескольких символов, в частности, запятая с пробелом, точка с запятой с пробелом мной не рассматривались. Ограничение: в данных первого поля не должно быть символов из списка разделителей, иначе возможно неверное определение разделителя полей. Шапка задаётся шаблоном в параметре Str00. В шаблоне наименования полей перечислены через пробел, при отсутствии в файле шапки, для обработки шапка добавляется в промежуточный файл с разделителем, взятым из первой строки, если он содержится в списке возможных разделителей. У меня нет программ Iconv и gpsbabel, поэтому я использовал для отладки их имитации посредством команды copy. Реально конвертация мной не отлаживалась. |
Время: 22:17. |
Время: 22:17.
© OSzone.net 2001-