Что нового

Разрезать текстовый файл на части

cheslav

Новичок
Сообщения
18
Репутация
0
Версия AutoIt: 3.
v3.3.10.0
Описание:

Добрый день. Есть большой файл txt разбитый на блоки которые начинаются со строки вида !что угодно!

!что угодно!
текст
текст
...
текст
!другое что угодно!
текст
текст
текст
...
текст

Требуется каждый блок записать в отдельный файл с именем что угодно.txt, другое что угодно.txt и т.д.
Заранее спасибо.

Примечания:
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Просьба прикрепить файл-образец. Так как из вашего примера не понятно, что именно является переменной, что меняется, а что остается неизменным.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
$sFile = FileOpen("большой_файл.txt",0)
$rfile = FileOpen("ошибка_данных.txt",1)
While 1
	$line = FileReadLine($sFile)
	If @error Then ExitLoop
	$aaa = StringSplit($line,"!")
	If UBound($aaa) > 2 Then
		FileClose($rfile)
		$rfile = FileOpen($aaa[2]&".txt",1)
	Else
		FileWriteLine($rfile,$line)
	EndIf
WEnd
FileClose($sFile)
FileClose($rFile)
 
Автор
C

cheslav

Новичок
Сообщения
18
Репутация
0
содержимое исходного файла

[box title=TitleBox]
!bs1!
NAME=NAME3,STATE=ACTIVE;
NAME=NAME3,STATE=ACTIVE;
NAME=NAME2,STATE=ACTIVE;
NAME=NAME2,STATE=PASSIVE;
NAME=NAME2,STATE=ACTIVE;
NAME=NAME1,STATE=ACTIVE;
NAME=NAME1,STATE=PASSIVE;
NAME=NAME1,STATE=ACTIVE;
!bs2!
NAME=NAME3,STATE=ACTIVE;
NAME=NAME3,STATE=ACTIVE;
NAME=NAME2,STATE=ACTIVE;
NAME=NAME2,STATE=PASSIVE;
NAME=NAME2,STATE=ACTIVE;
NAME=NAME1,STATE=PASSIVE;
NAME=NAME1,STATE=PASSIVE;
NAME=NAME1,STATE=ACTIVE;
NAME=NAME3,STATE=ACTIVE;
NAME=NAME2,STATE=ACTIVE;
NAME=NAME2,STATE=PASSIVE;
NAME=NAME2,STATE=ACTIVE;
NAME=NAME1,STATE=ACTIVE;
NAME=NAME1,STATE=PASSIVE;
NAME=NAME1,STATE=ACTIVE;
!bs3!
NAME=NAME2,STATE=ACTIVE;
NAME=NAME2,STATE=PASSIVE;
NAME=NAME2,STATE=ACTIVE;
NAME=NAME1,STATE=ACTIVE;
NAME=NAME1,STATE=PASSIVE;
NAME=NAME1,STATE=ACTIVE;
[/box]
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Код:
Global $sFileName = FileOpenDialog('Выберите файл', @WorkingDir, 'Все файлы (*.*)')
If @error <> 0 Then Exit

Global $sOutDir = FileSelectFolder('Каталог для новых файлов', @ScriptDir)
If @error <> 0 Then Exit

Global $sFile = FileRead($sFileName)
Global $aBlocks = StringRegExp($sFile, '(?s)!([^!]+)!([^!]*)', 4)
For $i = 0 To UBound($aBlocks) - 1
	Local $aBlock = $aBlocks[$i]
	FileDelete($sOutDir & $aBlock[1])
	FileWrite($sOutDir & $aBlock[1] & '.txt', StringStripWS($aBlock[2], 3))
Next
 

mef-t

Осваивающий
Сообщения
306
Репутация
30
Без проверок на ошибки

Код:
#include <Array.au3>

$test = FileRead("file.txt")
$sText = StringSplit($test,"!")

For $i = 2 To $sText[0] Step 2
   FileWrite ($sText[$i]&'.txt', StringTrimLeft($sText[$i+1], 1)) ;удаляю лишний пробел
Next
 
Автор
C

cheslav

Новичок
Сообщения
18
Репутация
0
Всем спасибо за оперативность.
 
Верх