Что нового

Удалить первую строку в txt и перезаписать

tryinfinity

Новичок
Сообщения
40
Репутация
0
Доброго дня!
Код:
#include <File.au3>

$end = _FileCountLines("test.txt")

While $end >= 1
$str = FileReadLine("test.txt", 1)
MsgBox(0, "", $str)
_FileWriteToLine("test.txt", 1, "", 1)
$end = _FileCountLines("test.txt")
WEnd


Не работает это код на win 10, хотя на семерке без проблем. Может есть решение как пофиксить?
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Код:
$strs = FileReadToArray("test.txt")
FileDelete("test.txt")

For $i=1 To UBound($strs)-1
	FileWriteLine("test.txt", $strs[$i])
Next
 
Автор
T

tryinfinity

Новичок
Сообщения
40
Репутация
0
Спасибо, но при кол-ве строк более 30к долго происходит это процесс.
 

hedji

Продвинутый
Сообщения
409
Репутация
94
Так должно быть побыстрее:
Код:
#include <Array.au3>
#include <File.au3>

$strs = FileReadToArray("test.txt")
FileDelete("test.txt")
_ArrayDelete($strs, 0)
_FileWriteFromArray("test.txt", $strs)
 

Sergio

Новичок
Сообщения
42
Репутация
3
hedji сказал(а):
Так должно быть побыстрее:


такой вариант хорош для небольших файлов. Если файл будет несколько ГБ, то есть вероятность, что не хватит памяти
 

IMStrelcov

CTPEJIbLLOB
Сообщения
259
Репутация
66
hedji сказал(а):
Так должно быть побыстрее:
А так еще быстрее:
Код:
$t=TimerInit()

$s=FileRead("test.txt")
$s=StringRegExpReplace($s, '(?m)^.*$\s*', '', 1)
FileDelete("test.txt")
FileWrite("test.txt", $s)

$t=TimerDiff($t)
ConsoleWrite($t&@CRLF)


Добавлено:
Сообщение автоматически объединено:

А так можно с большими файлами:
Код:
$t=TimerInit()

$hFileRead = FileOpen("test.txt")
$hFileWrite = FileOpen("test.txt.tmp", 2 +8)
FileReadLine($hFileRead)

While 1
	$sLine = FileReadLine($hFileRead)
	If @error Then
		ExitLoop
	EndIf
	FileWrite($hFileWrite, $sLine& @CRLF)
WEnd

FileClose($hFileRead)
FileClose($hFileWrite)
FileMove("test.txt.tmp", "test.txt", 1 +8)

$t=TimerDiff($t)
ConsoleWrite($t&@CRLF)
 
Верх