Что нового

Как удалить один символ справа во всех строчках файла?

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Добрый вечер.

В файле 1.txt имеются прокси:
176.53.248.63 3128

185.119.56.8 53281

46.254.217.54 53281

31.220.183.217 53281

46.229.187.169 53281

Нужно было заменить пробелы на двоеточие.
Код:
#include <File.au3>;
$sPathOld = "1.txt"
$sPathNew = "2.txt"
$slovo = "	" ;  слово для замены
$sTest = FileRead($sPathOld)
$sTest = StringReplace($sTest, $slovo, ":");меняем на двоеточие
FileWrite($sPathNew, $sTest)
Sleep(1000)

$sPathOld = "2.txt"
$sPathNew = "3.txt"
$sTest = FileRead($sPathOld)
$sTest1=StringTrimRight ( $sTest, 1); удаляет указанное количество символов строки справа
FileWrite($sPathNew, $sTest1)
Sleep(1000)


Получается
176.53.248.63:3128:
:
185.119.56.8:53281:
:
46.254.217.54:53281:
:
31.220.183.217:53281:
:
46.229.187.169:53281:
:
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
Код:
$sTest=StringRegExpReplace($sTest,'(\S+)\s+(\S+)','\1:\2')
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Спасибо.

Код:
$sPathOld = "2.txt"
$sPathNew = "3.txt"                                
$sTest1 = FileRead($sPathOld)
$sTest=StringRegExpReplace($sTest1,'(\S+)\s+(\S+)','\1:\2')
StringTrimRight ( $sTest, 1); удаляет указанное количество символов строки справа
FileWrite($sPathNew, $sTest)
Sleep(1000)
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
sergeinovilozf, в вашем скрипте StringTrimRight ничего не делает
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Tempo, можете подсказать? Никак не уберу ":" в конце строк.
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
sergeinovilozf, вы не используете возвращаемое значание от функции. И она работает со сторокой, а не подстроками

В варианте с регуляркой в конце строк нет ":"
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Так пробывал не получается:
Код:
$sPathOld = "2.txt"
$sPathNew = "3.txt"                                
$sTest1 = FileRead($sPathOld)
$sTest2=StringRegExpReplace($sTest1,'(\S+)\s+(\S+)','\1:\2');любой непробельный символ+пустой символ+любой непробельный символ,     меняем на :
$sTest3=StringTrimRight ( $sTest2, 1); удаляет указанное количество символов строки справа
FileWrite($sPathNew, $sTest3)
Sleep(1000)


При копировании в конце ":",там "двоеточие+перенос строки+двоеточие".
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Tempo [?]
она работает со сторокой, а не подстроками
sergeinovilozf, думаю вы должны были понять что в вашем случае она вам не подойдет

Код:
Local $sTest = "176.53.248.63   3128       " & @CRLF & _
		"    " & @CRLF & _
		"185.119.56.8   53281       " & @CRLF & _
		"    " & @CRLF & _
		"46.254.217.54   53281       " & @CRLF & _
		"    " & @CRLF & _
		"31.220.183.217   53281       " & @CRLF & _
		"    " & @CRLF & _
		"46.229.187.169   53281   "
$sTest = StringRegExpReplace($sTest, "(\S+)\s+(\S+)\s+", "\1:\2" & @CRLF)
MsgBox(0, @extended, $sTest)
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
В метасимволах неправильно,что-то.По разному пробую
Код:
$sTest2=StringRegExpReplace($sTest1,'(\S+$)','\1:\2' & @CRLF)
 
A

Alofa

Гость
sergeinovilozf сказал(а):
... По разному пробую...
Без предоставления исходного .txt файла так можно еще доооолго пробовать :smile:
Код:
; ...
$sTest = StringRegExpReplace($sTest, '\D*((?:\d+\.){3}\d+)\D+(\d+)\D+', '$1:$2' & @CRLF)
; ...
 
Автор
S

sergeinovilozf

Новичок
Сообщения
51
Репутация
0
Alofa,спасибо,работает.

Можете объяснить,почему так:
Код:
'\D*((?:\d+\.){3}\d+)\D+(\d+)\D+', '$1:$2' & @CRLF
;любая не цифра-повтор-((предыдущий символ : любая цифра-любой символ){начало повторений}любая цифра)любая не цифра плюс цифра и не цифра,меняем на "ссылка на найденный элемент"т.е. ставим  :
 
A

Alofa

Гость
sergeinovilozf сказал(а):
... Можете объяснить...
Код:
'\D*((?:\d+\.){3}\d+)\D+(\d+)\D+'

Ищем следующий блок текстовой информации, который должен состоять из (по порядку):
  • \D* - любой символ, но только не цифра, повторенный несколько раз или которого вообще может не быть. Этот блок нужен для отсеивания"мусорных" символов перед нужной нам группой.
  • ((?:\d+\.){3}\d+) - группа для захвата которая должна стать ссылкой №1 ($1). Все найденное внутри этой группы войдет в результат ссылки - состоит из:
    - (?:\d+\.){3} - Группа из цифр и последующих точек повторенная 3 раза, исключенная из найденных (! каждое в отдельности повторение), но должна существовать.
    - \d+ - цифра повторенная 1 или более раз (группа цифр).
    Для понятности весь этот блок можно описать иначе: "(\d+\.\d+\.\d+\.\d+)"
  • \D+ - что угодно, но только не цифра, повторенная 1 или более раз.
  • (\d+) - группа для захвата которая должна стать ссылкой №2 ($2). Это цифра повторенная 1 или более раз.
  • \D+ - что угодно, но только не цифра, повторенная 1 или более раз. Этот блок захватывает все символы (в том числе и символы переноса на новую строку) до следующего совпадения.
Все, что соответствует заданному шаблону будет заменено на:
Код:
'$1:$2' & @CRLF
 
Верх