Что нового

[Данные, строки] Перенос данных из TXT в XML

GitoKorol

Новичок
Сообщения
5
Репутация
0
Привет всем, стоит задача перенести данные из файла txt в xml:

ТХТ совержит в себе вот такую информацию:
Код:
СекцияДокумент=Платежное поручение
Номер=256
Дата=29.08.2011
Сумма=25200.00
ПлательщикСчет=40702810500000242403
ДатаСписано=26.08.2011
ПлательщикИНН=5050049363
ПлательщикКПП=505001007
Плательщик1= ООО "Наша компания" в Центральном ф-ле Банка г.Москва
ПлательщикРасчСчет=40702810500200142802
ПлательщикБанк1= БАНК "НАШБАНК" (ОАО)
ПлательщикБанк2= г Москва
ПлательщикБИК=044525181
ПлательщикКорсчет=30101810900000000181
ПолучательСчет=40817810738061509827
ДатаПоступило=
ПолучательИНН=7707083897
ПолучательКПП=775003017
Получатель1= ОАО Московский банк Сбербанка России №9038/01328 
ПолучательРасчСчет=40817810738061509823
ПолучательБанк1= ОАО "СБЕРБАНК РОССИИ"
ПолучательБанк2= г Москва
ПолучательБИК=044525225
ПолучательКорсчет=30101810400000000365
ВидПлатежа=электронно
ВидОплаты=01
СтатусСоставителя=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательНомера=
ПоказательДаты=
ПоказательТипа=
СрокПлатежа=
Очередность=6
НазначениеПлатежа=За какие то услуги
КонецДокумента
Некоторые поля необходиом выдрать и поместить в суцествующий XML файл. Его структура с данными будет выглядеть так:

Код:
  <LINE DATE="03.12.2010 10:02(Дата импорта)">
    <Value ID="259" Name="ООО "Наша компания" в Центральном ф-ле Банка г.Москва" Date="29-08-2011" Type="1" Number="259" INN="5050049363" Sum="25200.00">За какие то услуги</Value>
 
  </LINE>
Необходим простой пример как это можно реализовать.

Большое спасибо!
 

axlwor

Скриптер
Сообщения
657
Репутация
147
OffTopic:
а семерка не делает готовый xml?
 

XpycT

Скриптер
Сообщения
380
Репутация
132
GitoKorol
Как вариант можно сделать так
Код:
$sTXTFile = @ScriptDir & "\Data.txt" ; Путь к TXT файлу с информацией
$sXMLFile = @ScriptDir & "\Data.xml" ; Путь для сохранения XML файла

$sTXTData = StringReplace(FileRead($sTXTFile), @CRLF, "")

$aXMLData = StringRegExp($sTXTData, "Номер=(\d+)Дата=([\d\.]+)Сумма=([\d\.]+)(?:.*)ПлательщикИНН=(\d+)(?:.*)Плательщик(\d)=(.*)ПлательщикР(?:.*)НазначениеПлатежа=(.*)КонецДокумента", 3)
$aXMLData[1] = StringReplace($aXMLData[1], ".", "-")
$aXMLData[5] = StringStripWS($aXMLData[5], 1 + 2)

$sLineDate = @MDAY & "." & @MON & "." & @YEAR & " " & @HOUR & "." & @MIN

$sValueStr = '    <Value ID="' & $aXMLData[0] & '" Name="' & $aXMLData[5] & '"  Date="' & $aXMLData[1] & '" Type="' & $aXMLData[4] & '" '
$sValueStr &= 'Number="' & $aXMLData[0] & '" INN="' & $aXMLData[3] & '" Sum="' & $aXMLData[2] & '">' & $aXMLData[6] & '</Value>'

FileWriteLine($sXMLFile, '<LINE DATE="' & $sLineDate & '">' & @CRLF & $sValueStr & @CRLF & '</LINE>' & @CRLF)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
GitoKorol,
Можно еще так попробовать:
Код:
$sFileTxt = @ScriptDir & '\test.txt'

Dim $aSearch[9][4] = [[8],['Номер', 'ID=', '"'],['Плательщик1', 'Name=', '"'],['Дата', 'Date=', '"-'], _
		['ВидОплаты', 'Type=', '"num'],['Номер', 'Number=', '"'], _
		['ПлательщикИНН', 'INN=', '"'],['Сумма', 'Sum=', '"'],['НазначениеПлатежа']]

$sTextOld = FileRead($sFileTxt)
If Not $sTextOld Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
$sTextNew = @TAB & '<LINE DATE="' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & ':' & @MIN & _
		'(Дата импорта)">' & @CRLF & @TAB & @TAB & '<Value '

For $i = 1 To $aSearch[0][0]
	$aSearch[$i][3] = StringStripWS(StringRegExpReplace($sTextOld, '(?s).*?' & $aSearch[$i][0] & '=(.*?)\r\n?.*', '$1'), 3)
	If StringInStr($aSearch[$i][2], 'num') Then
		$aSearch[$i][3] = Number($aSearch[$i][3])
	EndIf
	If StringInStr($aSearch[$i][2], '"') Then
		$aSearch[$i][3] = '"' & $aSearch[$i][3] & '"'
	EndIf
	If StringInStr($aSearch[$i][2], '-') Then
		$aSearch[$i][3] = StringReplace($aSearch[$i][3], '.', '-')
	EndIf
	$aSearch[$i][1] &= $aSearch[$i][3]
	If $i < $aSearch[0][0] Then
		$sTextNew &= $aSearch[$i][1] & ' '
	EndIf
Next
$sTextNew &= '>' & $aSearch[$aSearch[0][0]][1] & '</Value>' & @CRLF & @CRLF & @TAB & '</LINE>' & @CRLF
ConsoleWrite($sTextNew & @LF)
$sFileXml = StringRegExpReplace($sFileTxt, '.*\\|\.[^.]*$', '') & '.xml'
$hFile = FileOpen($sFileXml, 1) ;нужную кодировку поставьте
FileWrite($hFile, $sTextNew)
FileClose($hFile)
 
Автор
GitoKorol

GitoKorol

Новичок
Сообщения
5
Репутация
0
Помогло, спасибо большое, задача решена.
СПАСИБО!!!!!!!
 
Верх