Что нового

Как заменить текст в файле целиком а не в строке?

Tapok

Новичок
Сообщения
204
Репутация
0
Почему не работает код:
Код:
$hRead = 'один два'
$mas1 = StringRegExpReplace($hRead,'^(\w+)\s+(.+)','<tr>\r\n<td>\1</td>\r\n<td>\2</td>\r\n</tr>')
ConsoleWrite($mas1 & @LF)

В RegexBuddy все работает:
поиск:
Код:
^(\w+)\s+(.+)
замена:
Код:
<tr>\r\n<td>\1</td>\r\n<td>\2</td>\r\n</tr>
на выходе:
Код:
<tr>
<td>один</td>
<td>два</td>
</tr>

и если в файле менять, я что-то не так пишу:

Код:
$hRead = FileRead(@ScriptDir & '\tmp\спс.txt')
$mas1 = StringRegExpReplace($hRead,'^(\w+)\s+(.+)','<tr>\r\n<td>\1</td>\r\n<td>\2</td>\r\n</tr>')
ConsoleWrite($mas1 & @LF)


тоже не работает
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Tapok, вам уже много раз писали "читайте внимательно справку"
\w - [0-9a-zA-Z_] - любой алфавитно-числовой символ или подчеркивание (только символы латинского алфавита)
Попробуйте так
Код:
$mas1 = StringRegExpReplace($hRead,'^(\H+)\s+(.+)','<tr>\\r\\n<td>\1</td>\\r\\n<td>\2</td>\\r\\n</tr>')
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
edyapd, за совет про справку спасибо.
У Вас Ваш код работает? У меня -нет.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
У меня работает, AutoIt 3.3.12.0
Код:
$hRead = 'один два'
$mas1 = StringRegExpReplace($hRead,'^(\H+)\s+(.+)','<tr>\\r\\n<td>\1</td>\\r\\n<td>\2</td>\\r\\n</tr>')
ConsoleWrite($mas1 & @LF)



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

В консоле:
Код:
<tr>\r\n<td>один</td>\r\n<td>два</td>\r\n</tr>
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
вот так работает:
Код:
$hRead = 'один два'
$mas1 = StringRegExpReplace($hRead,"^(\H+)\s+(.+)","<tr>"&@LF&"<td>\1</td>"&@LF&"<td>\2</td>"&@LF&"</tr>")
ConsoleWrite($mas1 & @LF)

но почему надо писать @LF а не \r\n ?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Или так:
Код:
$hRead = 'один два'
$mas1 = StringRegExpReplace($hRead,'^(\H+)\s+(.+)','<tr>'&@CRLF&'<td>\1</td>'&@CRLF&'<td>\2</td>'&@CRLF&'</tr>')
ConsoleWrite($mas1 & @LF)
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
alex33 сказал(а):
В консоле:
Код:
<tr>\r\n<td>один</td>\r\n<td>два</td>\r\n</tr>
В консоли должно быть:
Код:
<tr>
<td>один</td>
<td>два</td>
</tr>


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

alex33 сказал(а):
Или так:
Код:
$hRead = 'один два'
$mas1 = StringRegExpReplace($hRead,'^(\H+)\s+(.+)','<tr>'&@CRLF&'<td>\1</td>'&@CRLF&'<td>\2</td>'&@CRLF&'</tr>')
ConsoleWrite($mas1 & @LF)

Так да. :smile:
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Tapok [?]
но почему надо писать @LF а не \r\n ?
Потому что AutoIt так устроен. Попробуйте функцию
Код:
StringFormat



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

Код:
ConsoleWrite(StringFormat("Первая строка\r\nВторая\r\nИ третья\r\n"))


Консоль:
Код:
Первая строка
Вторая
И третья
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
А можно ли как то подставить "StringFormat" внутрь "StringRegExpReplace", чтобы писать \r\n внутри "StringRegExpReplace"?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Tapok сказал(а):
А можно ли как то подставить "StringFormat" внутрь "StringRegExpReplace", чтобы писать \r\n внутри "StringRegExpReplace"?
Можно.
Код:
$hRead = 'один два'
$mas1 = StringRegExpReplace($hRead, '^(\H+)\s+(.+)', StringFormat('<tr>\r\n<td>\1</td>\r\n<td>\2</td>\r\n</tr>'))
ConsoleWrite($mas1 & @LF)
 
Автор
T

Tapok

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


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

Вдобавок, в продолжение того же вопроса...

Если у нас не строка, а файл
Код:
$hRead = FileRead(@ScriptDir & '\tmp\name.txt')
$mas1 = StringRegExpReplace($hRead, '^(\H+)\s+(.+)', StringFormat('<tr>\r\n<td>\1</td>\r\n<td>\2</td>\r\n</tr>'))
ConsoleWrite($mas1 & @LF)


так не работает, надо файл по строкам читать и строки подсовывать?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Tapok сказал(а):
Если у нас не строка, а файл
так не работает, надо файл по строкам читать и строки подсовывать?
Так вы для примера хоть файл прикрепите. У вас же не одна строка там? И что на выходе надо получить.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
edyapd сказал(а):
Так вы для примера хоть файл прикрепите. У вас же не одна строка там? И что на выходе надо получить.
Прикрепил.
На выходе должно быть:
Код:
<tr>
<td>один</td>
<td>два </td>
</tr>
<tr>
<td>три</td>
<td>четыре</td>
</tr>
 

Вложения

  • name.txt
    22 байт · Просмотры: 3

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуйте убрать ^
Код:
$mas1 = StringRegExpReplace($hRead, '(\H+)\s+(.+)', StringFormat('<tr>\r\n<td>\1</td>\r\n<td>\2</td>\r\n</tr>'))
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Работает! Большое спасибо! :IL_AutoIt_1:
 
Верх