Что нового

Не удаляется символ перевода строки из файла

fortages

Новичок
Сообщения
81
Репутация
3
Подскажите, пожалуйста, что неправильно?
Пользователь может ввести текст как попало, а именно - с кучей лишних пробелов и слов. Слова ненужные у меня заменять на " " получилось. Но как быть с символами перевода строки? (двойное нажатие Enter)?

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>

 
$Child = GUICreate("Поиск повторов", 199, 289, 192, 114)
$UserInput = GUICtrlCreateEdit("", 16, 40, 161, 177)
GUICtrlSetData(-1, "Текст набрать тут")
$OK = GUICtrlCreateButton("ОК", 8, 232, 81, 33, $WS_GROUP)
$Exit = GUICtrlCreateButton("Выйти", 104, 232, 81, 33, $WS_GROUP)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Exit
			Exit
		Case $OK
			_FuncFiles()
			ExitLoop
	EndSwitch
WEnd

;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Func _FuncFiles()
Local $Buffer
$Buffer = 'buffer.txt'

FileDelete($Buffer) ;для гарантии, что после предыдущего запуска в файле нет лишнего
FileWrite($Buffer,  GUICtrlRead($UserInput))

If (_ReplaceStringInFile("buffer.txt", "проверка", " ") = 0) Then
	ConsoleWriteError("такого слова не найдено" & @CRLF)
EndIf

;StringStripCR($Buffer)
;StringRegExpReplace($Buffer, '(\r\n|\r|\n){2,}', '\1')
StringRegExpReplace($Buffer, @CR & @LF & @CRLF, " ")


EndFunc ; <==_FuncFiles

Пыталась так:
Код:
;StringStripCR($Buffer)
;StringRegExpReplace($Buffer, '(\r\n|\r|\n){2,}', '\1')
StringRegExpReplace($Buffer, @CR & @LF & @CRLF, " ")

но ни одним из трех способов не получилось... Подскажите, что неправильно?
 

Skif_off

Знающий
Сообщения
173
Репутация
13
Код:
$BufferOut = StringRegExpReplace($Buffer, '(\r\n|\r|\n)', ' ')

?
Так убираются все переводы строк, (\r\n|\r|\n){2,} - только пустые строки.
 
Автор
fortages

fortages

Новичок
Сообщения
81
Репутация
3

Skif_off

Знающий
Сообщения
173
Репутация
13
fortages
Точно, вы же убираете слова и остаются строки с пробелами, а если так
Код:
$BufferOut = StringRegExpReplace(StringRegExpReplace($Buffer, '(^[ \t]+$)', ''), '(\r\n|\r|\n)', ' ')

?
Или даже так:
Код:
$BufferOut = StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($Buffer, '(^[ \t]+$)', ''), '(\r\n|\r|\n)', ' '), '[ \t]{2,}', ' ')

чтобы сразу убрать повторы пробелов.

Проверил ещё раз с
текст1

проверка

текст2
у меня отрабатывает чётко, попробуйте добавить после StringRegExpReplace()
Код:
MsgBox(0, '', @extended)

у меня получается 4.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
$data = StringStripWS($data, 3)
$data = StringRegExpReplace($data, '(?m)^[ \t]*$\r?\n', '')
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
А функция
Код:
StringStripWS
сюда непойдёт?
 
Автор
fortages

fortages

Новичок
Сообщения
81
Репутация
3
Спасибо всем, кто отозвался!

Чего только не перепробовала сделать - все никак не выходило. Как ни открою файл Buffer.txt - все без изменений и как при вводе пользователя.
В итоге в тексте собралась уже целая куча закомментированных строк с тем, что "не сработало".

Код:
;StringStripWS('buffer.txt', 8)
;$string = StringRegExpReplace($Buffer,"(\r\n)(\1)+","\1")
;$BufferOut =StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($Buffer, '(^[ \t]+$)', ''), '(\r\n|\r|\n)', ' '), '[ \t]{2,}', ' ')
;FileWrite($Buffer,  $BufferOut)
;$BufferOut = StringRegExpReplace($Buffer, '(\r\n|\r|\n)', ' ')
;StringStripCR($Buffer)
;StringRegExpReplace($Buffer, '(\r\n|\r|\n){2,}', '\1')
;StringRegExpReplace($Buffer, @CR & @LF & @CRLF, " ")
;StringRegExpReplace($Buffer,  @CRLF, " ")
;StringRegExpReplace($Buffer,  '\n', '')
;StringRegExpReplace($Buffer, (Chr(13)), '')
;StringRegExpReplace($Buffer,  '\r(?!\n)', @CRLF)
;StringRegExpReplace($Buffer,  "(\r\n)(\1)+","\1")
;$BufferOut = StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($Buffer, '(^[ \t]+$)', ''), '(\r\n|\r|\n)', ' '), '[ \t]{2,}', ' ')
;_ReplaceStringInFile ("Buffer.txt", @LF, '')

;$test = _ReplaceStringInFile ("buffer.txt", @CRLF, '')
;MsgBox(0, "Char read:", $test)

;!!! $chars = StringReplace($Chars, Chr(10), '')
    ;$chars = StringReplace($Chars, @TAB, '')
    ;$chars = StringReplace($Chars, ' ', '')
   	;s$chars = StringReplace($Chars, @CRLF, '')
	;StringStripWS($chars,8)


А в итоге оказалось...
1505004552.png

Добавила
Код:
$Buffer = FileOpen("buffer.txt", 0)


    $chars = FileRead($Buffer)
	$chars = StringStripWS ($chars,5)
	$chars = StringReplace($Chars, @LF, '')
	MsgBox(0, "Char read:", $chars)
	FileWrite($Buffer, $chars)
FileClose($Buffer)

И оказалось, что проблема не только в удалении перевода строки (возможно, те попытки и оказывали нужный результат), при проверке MsgBox'ом - все, оказывается, заработало
f6569888dada.png

И только в файле (по которому проверяла) - все равно
Доабавляю
Код:
FileWrite($Buffer, $chars)
;или
FileWrite($Buffer, GUICtrlRead($chars))

И все равно в файл не записывается...
 

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
fortages
Файл открыт только для чтения, запись в него невозможна...

Код:
$Buffer = FileOpen("buffer.txt", 0)
 $chars = FileRead($Buffer)
 FileClose($Buffer)

 $Buffer = FileOpen("buffer.txt", 2)
 $chars = StringStripWS ($chars,5)
 $chars = StringReplace($Chars, @LF, '')
 FileWrite($Buffer, $chars)
 FileClose($Buffer)
 
Автор
fortages

fortages

Новичок
Сообщения
81
Репутация
3
snoitaleR как же все оказалось просто. Стыдно, что не поняла.

Огромное всем спасибо за помощь, все получилось! snoitaleR, alex33, inververs, Skif_off, огромное-огромное спасибо! :-[
 
Верх