![]() |
вывод строки из *.xml
Добрый день!
Есть папка, в которую закачиваются файлы с ftp несколько раз в день. Названия файлов типа:3143719278_1605201290029.xml Необходимо прочитать все файлы в папке, и вывести из каждого файла то, что содержится в строке <InsuranceNumber>94595</InsuranceNumber> , т.е. в этом случае вывести 94595. Причем итоговое значение д.б. таким : первая часть имени файла остается той же, т.е. 3143719278, а через _ добавляем 94595. Получаем на выходе: 3143719278_94595 Если же поле InsuranceNumber пустое, то вывести 3143719278_0. Каким образом это можно сделать или вообще можно? |
Для работы скрипта нужен Grep из набора утилит GNU coreutils, портированный под Windows, плюс его зависимости. Рядом со скриптом создать директорию bin, куда и сложить бинарник грепа и либы, нужные для его работы.
Код:
@Echo Off Исправил скрипт, вначале невнимательно прочел условие и не сделал обработку пустого значения. |
Anonymоus, спасибо, заработало, НО:
Если поле InsuranceNumber содержит русские буквы, то получаем в итоге крякозябры, можно ли их исправить? |
LAKERS824, об этом в вашем условии ни слова не было, предполагалось, что InsurcanceNumber состоит из цифр, судя по примеру. Смотрите, в какой кодировке ваши XML, и в какой кодировке сохранён скрипт. Он выводит только то, что получает из файла. Пусть даже в консоли выводятся кракозябры, если перенаправить их в файл - получится читаемый текст в той самой кодировке, в которой были XML-файлы.
|
Anonymоus, а как это закинуть в файл? у меня только первая строка в файл уходит.
|
Anonymоus, Еще такой момент, после знака _ м.б. различное кол-во символов (точка, 0, начинается с буквы, оканчивается буквой, более 5 символов, 5 символов.).
Так вот, можно ли сделать так, чтобы там где '_98765' (5 символов после _) или '_987654' (6 символов после _) - записывались в один файл, а все остальное переправлять в другой файл? |
LAKERS824, перенаправляется в файл - вот так:
Код:
Echo !Prefix!_!InsuranceNumber!>>"file.txt" Код:
@Echo Off |
3 вопросика:
1 Почему не должно быть точки? Если она все же есть, то в какой из файлов она уйдет? в result_other.txt? 2 Работает наполовину, файла result5and6.txt так и не создается - не нашел после выполнения команды данного файла. 3 И так где 5 знаков тоже вываливаются в result_other.txt |
Точки не должно быть, потому что она используется как разделитель в delims, чтобы отделить и отбросить ненужное расширение файла.
Работает полностью, я протестировал вот на этом наборе файлов - http://rghost.ru/39065474 |
я наверное неправильно выразился.
Надо читать внутренний номер InsuranceNumber и если он 5 или 6, то в один файл, если он точка, ноль или отличается от 5 и 6, то в другой. Все исправил сам, спасибо. |
Вот, теперь всё предельно чётко, так бы сразу и сформулировали.
Код:
@Echo Off |
Anonymоus, огромнейшее спасибо.
|
По-умолчанию текстовый файл сохраняется в UTF формате. Можно ли сохранить его в ANSI?
|
LAKERS824, утилита Recode из пакета unxutils поможет вам.
|
Код:
recode -f utf8/crlf..cp1251 <D:\pronin\result5and6.txt >>D:\pronin\new_result5and6.txt |
LAKERS824, попробуйте вот так:
Код:
@Echo Off |
при этом создается пустой файл result_5and6.txt, в нужной кодировке ANSI, а файл result_other.txt вообще не создается
|
LAKERS824, к сожалению, я не телепат, чтобы определить кодировку ваших xml-файлов. Судя по тому, что файлы с результатами создавались в utf-8, я предположил, что xml в такой же кодировке, и вписал пару "utf8..cp1251/" в скрипт. Уточните, в какой именно они кодировке и исправьте её в скрипте самостоятельно - либо приложите несколько заархивированных xml для образца, чтобы я сам исправил.
|
Вложений: 1
вложил один xml
|
Тип XML: Конец строки - win (CR+LF), Кодировка - UTF8 без BOM
Файл с результатом, без recode: Конец строки - win (CR+LF), Кодировка - UTF8 без BOM Файл с результатом, в который всё писалось через recode: Конец строки - win (CR+LF), Кодировка - cp1251 Всё верно, пара кодировок правильная, вот результат обработки вашего xml: ![]() Вы точно запускаете мой скрипт без модификаций? Файлы не должны создаваться пустыми, у меня всё работает, и на тестовых файлах, и на вашем xml. |
Код:
@Echo on |
LAKERS824, попробуйте запустить вот этот скрипт: http://rghost.ru/39092099
Настройки пути к xml вынесены в файл settings.ini. На вашем файле отработало успешно. |
В принципе работает, но я заметил следующее, если в строке
Код:
Set Path=%Path%;%CD%\bin Код:
Set Path=%Path%;D:\KDL\grep+parseXML\bin А если я оставляю Код:
%CD%\bin блин, на XP работает, как описал выше, переношу те же файлы на Windows 7 64-бит, меняю только пути и опять создается пустой файл один |
Объясните смысл замены %CD%\bin на вписанный вами вручную абсолютный путь? Не меняйте пожалуйста код, если он работает и нет веской причины его переделывать.
Почему именно после вашей модификации перестает работать точно не скажу, попробуйте сравнить вывод Echo %CD% с тем, что вы вписываете как абсолютный путь. |
перенес на 2003 винду, тоже создается пустой файл.
Set Path=%Path%;%CD%\bin - эта строка указывает пусть к grep+parseXML? Ведь у меня в папке, скажем D:\papka есть папка grep+parseXML\bin, а также в корне papka\bin - которая от recode. Так верхний путь не может находить неверный путь? |
Цитата:
Цитата:
Плюс к тому, преимущество записи Set Path=%Path%;%CD%\bin - в портабельности самого скрипта, в нем нету абсолютных путей, его можно переносить куда угодно, и на другом ПК он будет работать точно так же (если не забудут скопировать директорию bin вместе с ним). |
спасибо, разобрался с папкой bin и все встало на свои места. СПАСИБО.
|
Время: 06:02. |
Время: 06:02.
© OSzone.net 2001-