![]() |
Экспорт данных из одного txt файла в другой
Добрый день!
Нужна помощь: есть файл Kl_to_1c.txt примерно такого содержания: Необходимо получить файл с таким содержимым: Т. е. формат типа: %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% Спасайте. :) |
Например, так:
Исполнять под «cscript.exe», указывая исходный файл аргументом скрипта, а результирующий — перенаправлением вывода, наподобие: Код:
cscript.exe //nologo "C:\Песочница\0018\MyScript.vbs" "C:\Temp\Kl_to_1c.txt" 1>Out.txt 2>Errors.txt |
Великолепно! Почти. Только нужно еще сделать так чтобы после:
%Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% Начиналась новая строка, сейчас идет сразу: %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% - %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% и т. д. А надо: %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% .... и т. д. до конца |
В реальном файле «Kl_to_1c.txt» несколько квитанций о платежах? В Вашем примере только одна квитанция, а я просто не успел взять реальный файл у себя, а так бы проверил на реальных данных.
Попробуйте тогда так: |
Да, в реальном файле могут быть несколько квитанций. Теперь всё OK. Спасибо огромное!
|
В принципе и так нормально, но кое-что еще можно поправить:
Сейчас, если %Номер% одинаковое количество символов, то всё нормально, но если число разное, т. е. в одной строке, например 5 символов, а во второй - 3, то файл получается немного кривым. Можно как-то облагородить форматирование? Чтобы получались ровные колонки? Вот тогда счастью моему не было бы предела. :) |
TRaMeLL, Вам нужен табличный, выровненный вид? Зачем тогда нужны разделители « - » в результирующем файле?
|
Да, нужен табличный вид. " - " это просто для примера, я вместо него vbTab поставил.
|
TRaMeLL, ясно. Попробуйте так:
На копейки не рассчитано. Если могут присутствовать — надо будет править код. |
Этот что-то не запустился, в логе ссылается на 51-ю строку. И там копейки присутствуют еще.
|
Доберусь до реального файла — посмотрю. И, коль есть копейки — надо будет перестроить логику выравнивания Currency под десятичный разделитель. В Вашем файле, он, кстати, какой? Точка или запятая?
|
В моем файле - точка.
|
TRaMeLL, добрался, попробовал на своём файле. Теперь опробуйте Вы на своём:
|
Неа, всё-равно не хочет выполняться, пишет:
"convert.vbs(52, 7) Ошибка выполнения Microsoft vbscript: Несоответствие типа: 'CCur'" Вот мой файл - http://narod.ru/disk/59839075001.397...to_1c.zip.html |
Хмм. У меня на Вашем файле отработало нормально. Результат исполнения отправил в личку.
Подозреваю, что дело может быть в региональных настройках. Выложите сюда файл «International.reg» — результат исполнения команды: Код:
reg.exe export "HKEY_CURRENT_USER\Control Panel\International" "International.reg" |
Попробовал на Windows XP (RU) и на Windows 2000 SP4 (EN), тоже не запустился.
Вот ветка реестра от XP: А это от 7 x64: |
Дьявол кроется в деталях.
Код:
"sDecimal"="," Давайте попробуем сказать принудительно, что у Вас временно иная локаль: А отчего такой странный разделитель: Код:
"sThousand"="*" |
Вот теперь идеально. Не знаю: что бы я без Вас делал, спасибо огроменное! :)
А в настройках я ничего не менял, даже не знаю почему такой разделитель. |
|
Я снова за помощью. В реальных условиях, после перехода на новую систему файл Kl_to_1c.txt оказался другим и скрипт на нем не срабатывает.
Iska, написал вам PM, надеюсь на вашу помощь. |
TRaMeLL, в новом файле отсутствуют записи вида:
Цитата:
|
Почему отсутствуют? Там просто вначале документа не нужная информация, потом идет так (кусок из того же файла):
Результат должен быть, так же, вида: %Дата=% %Номер=% %Сумма=% %Плательщик=% %НазначениеПлатежа=% |
Пробуйте:
Если опять формат десятичных разделителей в файле и на машине не совпадает — раскомментируйте SetLocale'ы. |
Ага, десятичные опять не совпадают, раскоменнтировал строки. Работает как надо. Спасибо огромное, вы мне снова жизнь спасли. :)
|
|
Обнаружилась очередная проблема. В новом формате исходного файла в параметре %Сумма=% не указан "-". Сразу этого не заметил. Поэтому в результирующем файле все суммы пишутся как кредит. Дебет теперь можно определить по наличию данных в параметре %ДатаСписано=% исходного файла (если дата присутствует, то операция - дебет, если дата отсутствует, то операция - кредит).
Теперь необходимо поправить скрипт таким образом, чтобы суммы на дебетовых операциях в результирующем файле были помечены знаком "-". |
Цитата:
|
Отправил в PM.
|
TRaMeLL, пробуйте:
Замечание: Цитата:
Если возникнут ошибки с определением дебет/кредит — пишите. Сейчас просто полагаемся на то, что поле Сумма находится в секции ранее поля ДатаСписано. Если может быть обратное, то придётся усложнять разбор. |
Спасибо! С определением, похоже, проблем нет. Немного переделал скрипт, конечный вид:
Так ДатаСписано и ДатаПоступило - это 2 колонки, не знаю, стоит ли делать в одну или оставить так... |
Цитата:
|
Iska, спасибо вам в очередной раз. Скрипт работает. С операциями на этом можно закончить. На основе этого же скрипта сделал еще одну обработку того же файла. Теперь в результирующий файл пишутся общие суммы по датам. В, общем-то, работает как надо, единственный момент, который я хотел бы прояснить в следующем:
В исходном файле последовательность данных такая: Сейчас скрипт пишет первую строку в результирующий файл из данных начиная с самого начала исходного файла, правильнее было бы сделать, чтобы он писал их начиная с секции "СекцияРасчСчет" (т. е. пропускал данные до этой секции), но я сам пока-что не понял что нужно исправить в скрипте. Сейчас его вид: |
Время: 19:04. |
Время: 19:04.
© OSzone.net 2001-