Что нового

Вставка символа, объединение строк

Burzum

Новичок
Сообщения
11
Репутация
0
Версия AutoIt: Version 3.4.4

Описание:
Всем доброго времени суток, нужна помощь. Есть файл с ~ 40 000 строк, нужно в конец каждой строки поставить запятую а потом объединить каждые 400 строк в одну строку. В итоге из ~40 000 строк должно получится ~100 и все разделено запятой. :stars:

Примечания:
Файл для теста прилагается:
 

Вложения

  • id3 -.zip
    118.2 КБ · Просмотры: 5

sngr

AutoIT Гуру
Сообщения
1,015
Репутация
411
Код:
$file=FileRead(@ScriptDir&"\id3 - .txt")
StringReplace($file, @CRLF ,',')
$num=Floor(@extended/400)
$str=StringReplace($file, @CRLF ,',',400)
$str=StringReplace($str, @CRLF ,@LF,1)
For $i = 1 To  $num
	$str=StringReplace($str, @CRLF ,',',400)
	$str=StringReplace($str, @CRLF ,@LF,1)
Next
$str=StringReplace($str, @LF ,@CRLF)
$str=StringTrimRight($str,1)
FileWrite(@DesktopDir&'\123',$str)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Мой вариант.
Код:
Local $sFileRead = @ScriptDir & '\id3 - .txt', $sFileWrite = @ScriptDir & '\1_id3 - .txt', $hFileRead, $hFileWrite, $sTxt

$hFileRead = FileOpen($sFileRead)
If $hFileRead = -1 Then Exit 1
$hFileWrite = FileOpen($sFileWrite, 2)
If $hFileWrite = -1 Then Exit 2

While 1
	For $i = 1 To 400
		$sTxt &= FileReadLine($hFileRead)
		If @error Then ExitLoop 2
		$sTxt &= ','
	Next
;~ 	$sTxt &= @CRLF ;будет запятая в конце строки
	$sTxt = StringTrimRight($sTxt, 1) & @CRLF ;не будет запятой в конце строки
WEnd
If $sTxt Then FileWrite($hFileWrite, $sTxt)
FileClose($hFileRead)
FileClose($hFileWrite)


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

Burzum [?]
Версия AutoIt: Version 3.4.4
Варианты в версиях 3.3.+ Вас устроит или будете ждать выхода 3.4.4 версии? ;D
 

joiner

Модератор
Локальный модератор
Сообщения
3,573
Репутация
634
для версии 3.3.12.0
другой нет :smile:
Код:
Local $array = FileReadToArray(@ScriptDir & '\id3 - .txt')
If @error = 0 Then
	Local $fo = FileOpen(@ScriptDir & '\test.txt', 2)
	Local $n = 1, $string = ''
	For $i = 0 To UBound($array) - 1
		$string &= $array[$i] & ','
		If $n = 400 Then
			FileWrite($fo, $string & @LF)
			$n = 1
			$string = ''
		ElseIf $i = UBound($array) - 1 Then
			FileWrite($fo, $string)
		EndIf
		$n += 1
	Next
	FileClose($fo)
EndIf
 
Автор
B

Burzum

Новичок
Сообщения
11
Репутация
0
Всем огромное спасибо!

madmasles
Как всегда ваш вариант самый самый)

а насчет версии я погорячился конечно, перепутав с SciTE Version 3.4.4 ;D
 
Верх