Что нового

[Файловая система] В заданной папке, в каждом текстовом файле добавить название файла.

Apxumekmop

Новичок
Сообщения
2
Репутация
0
В общем есть папка, в этой папке находится от 1 и до 2000 текстовых файлов, может и больше. В каждом текстовом файле надо зайти и написать название этого файла первой строчкой, а последующий текст опустить на 1 строку ниже.
Пример:
Текстовый файл с названием - Секция 1.txt
Заходим в него и там есть текст (сейчас чисто рандомно взял):
Гэбриэл представляет собой самый ценный технологический актив, когда либо изобретенный в стране, а так же секретное оружие США
На выходе нужно получить текстовый файл Секция 1.txt с текстом:
Секция 1
Гэбриэл представляет собой самый ценный технологический актив, когда либо изобретенный в стране, а так же секретное оружие США
Проделать это надо со всеми текстовыми файлами в папке.
Вроде бы задача простенькая, но я её так и не смог решить, надеюсь на вашу помощь.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Код:
Local $sFolder, $aFileList, $Idx, $hFile, $sRead
; ---
$sFolder = @ScriptDir & "\dir\"
$aFileList = __GetFileList( $sFolder, "*.txt" )
If Not @Error Then
	For $Idx = 1 To $aFileList[0] Step 1
		$sRead = FileRead( $sFolder & $aFileList[$Idx] )
		$sRead = StringRegExpReplace( $aFileList[$Idx], "\.\w+\z", "" ) & @CRLF & $sRead

		$hFile = FileOpen( $sFolder & $aFileList[$Idx], 2 )
		FileWrite( $hFile, $sRead )
		FileClose( $hFile )
	Next

	MsgBox( 64, "Ok", "Total files=" & $aFileList[0] )
Else
	MsgBox( 16, "Error", "Error=" & @Error )
EndIf

Func __GetFileList( $sPath, $sFilter = "*" )
	Local $hSearch, $sFile, $sFileList

	$sPath = StringRegExpReplace($sPath, "[\\/]+\z", "") & "\"
	$hSearch = FileFindFirstFile($sPath & $sFilter)
	If @error Then _
		Return SetError(1, 0, "")

	While 1
		$sFile = FileFindNextFile($hSearch)
		If @error Then ExitLoop
		If (1 + @extended = 2) Then ContinueLoop
		$sFileList &= '|' & $sFile
	WEnd
	FileClose($hSearch)
	If Not $sFileList Then _
		Return SetError(2, 2, "")

	Return StringSplit(StringTrimLeft($sFileList, 1), "|")
EndFunc
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Код:
#include <File.au3>
#include <Array.au3>

$FileList=_FileListToArray(@ScriptDir, "*.txt")
If @Error=4 Then
    MsgBox (16,"Ошибка","Файлы не найдены.")
    Exit
EndIf

For $i=1 To $FileList[0]
   _FileWriteToLine($FileList[$i], 1, StringTrimRight($FileList[$i], 4), 0)
Next

MsgBox(64, "", "Готово")
 
Автор
A

Apxumekmop

Новичок
Сообщения
2
Репутация
0
Не думал, что так быстро отреагируют. Попробовал второй вариант, работает, первый вариант сохраню на всякий пожарный. Спасибо.
 
Верх