Что нового

[Массивы] преобразование данных из текстового файла

damien2008

Осваивающий
Сообщения
157
Репутация
30
добрый день. прошу помочь.

есть текстовый файл 1.txt в юникоде вида:
Код:
раз
два
три
...


необходимо его прообразовать в файл 2.txt вида:
Код:
;1
счет\\раз\\"\\
фактура\\раз\\"\\
склад\\раз\\"\\

;2
счет\\два\\"\\
фактура\\два\\"\\
склад\\два\\"\\

;3
счет\\три\\"\\
фактура\\три\\"\\
склад\\три\\"\\


как это можно сделать? спасибо.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
В справке:
FileOpen, FileClose
FileRead или FileReadLine
FileWrite или FileWriteLine
Если FileRead - StringSplit и For...Next
Для FileReadLine - While...Wend или Do...Until

Код:
Local $hInput, $hOutput, $sLine, $iCounter = 1

OnAutoItExitRegister('_OnExit')

$hInput = FileOpen('input.txt', 256)
If @error Then Exit
$hOutput = FileOpen('output.txt', 258)
If @error Then Exit

While 1
    $sLine = FileReadLine($hInput)
    If @error Then Exit
    FileWriteLine($hOutput, ';' & $iCounter & @CRLF & _
				  's4et\\' & $sLine & '\\"\\' & @CRLF & _
				  'faktura\\' & $sLine & '\\"\\' & @CRLF & _
				  'sklad\\' & $sLine & '\\"\\' & @CRLF & @CRLF)
	$iCounter += 1
Wend



Func _OnExit()
	FileClose($hInput)
	FileClose($hOutput)
EndFunc
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
218
А так?

Код:
$sInput = 'input.txt'
$sOutput = 'output.txt'

If Not FileExists($sInput) Then
	MsgBox(16, 'Error', 'input.txt is not existing')
	Exit
EndIf

If Not StringStripWS(FileRead($sInput), 8) Then
	MsgBox(16, 'Error', 'input.txt is empty')
	Exit
EndIf

Local $hInput, $hOutput, $sLine, $iCounter = 1

OnAutoItExitRegister('_OnExit')

$hInput = FileOpen($sInput, 256)
If @error Then Exit
$hOutput = FileOpen($sOutput, 258)
If @error Then Exit

While 1
    $sLine = FileReadLine($hInput)
    If @error Then Exit
    FileWriteLine($hOutput, ';' & $iCounter & @CRLF & _
                  's4et\\' & $sLine & '\\"\\' & @CRLF & _
                  'faktura\\' & $sLine & '\\"\\' & @CRLF & _
                  'sklad\\' & $sLine & '\\"\\' & @CRLF & @CRLF)
    $iCounter += 1
Wend

Func _OnExit()
    FileClose($hInput)
    FileClose($hOutput)
EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
damien2008 [?]
есть текстовый файл 1.txt в юникоде
Юникод разный бывает и флаги для открытия разные. Может быть, в этом проблема?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
damien2008
Попробуйте так:
Код:
$sFileOld = '1.txt'
$sFileNew = '2.txt'
$iEncoding = FileGetEncoding($sFileOld)
$hFileOld = FileOpen($sFileOld, $iEncoding)
$sTextOld = FileRead($hFileOld)
FileClose($hFileOld)
$aTextOld = StringSplit(StringStripCR($sTextOld), @LF)
$hFileNew = FileOpen($sFileNew, $iEncoding + 2)
For $i = 1 To $aTextOld[0]
	FileWrite($hFileNew, ';' & $i & @CRLF & 'счет\\' & $aTextOld[$i] & '\\"\\' & @CRLF & _
			'фактура\\' & $aTextOld[$i] & '\\"\\' & @CRLF & 'склад\\' & _
			$aTextOld[$i] & '\\"\\' & @CRLF & @CRLF)
Next
FileClose($hFileNew)
 
Верх