1 (изменено: Mambr, 2016-12-17 07:43:20)

Тема: AHK: Текст-разделить строки по символу и удалить символы во 2-й части

Добрый день всем!

Суть вопроса - имеется текст с любым содержанием, например:

Data =
(
Вася, который Пупкин-балда, балбес, лох
Петя, который Булкин-обжора, толстый, плюшкоед
Вася, который Пупкин-пофигист, анархист, раздолбай
Петя, который Булкин-очкарик, зануда, нытик
)

Задача - выбрать строки по ключевому слову, например - "Булкин", разделить их по символу "-" и удалить во второй части этих строк все запятые. Весь остальной текст должен быть сохранен без изменений.

Желательно, если возможно, сделать с помощью RegExReplace и без создания temp-файла.

Знаю как несколькими методами удалить полностью все знаки в тексте или в одной строке, но не получается с разделением строк.

Благодарю за любую помощь!

2

Re: AHK: Текст-разделить строки по символу и удалить символы во 2-й части

Data =
(
Вася, который Пупкин-балда, балбес, лох
Петя, который Булкин-обжора, толстый, плюшкоед
Вася, который Пупкин-пофигист, анархист, раздолбай
Петя, который Булкин-очкарик, зануда, нытик
)
KeyWord = Пупкин


Loop, Parse, Data, `n
{
IF InStr(A_LoopField, KeyWord)
	{
	Len := StrLen(KeyWord), Data1 := A_LoopField, Len_Data1 := StrLen(Data1)
	StringGetPos, pos, Data1, %KeyWord%	
	cs = % SubStr(Data1, 1, pos+Len) . StrReplace(SubStr(Data1, pos+Len+1, Len_Data1), ",")
	OutputData .= cs . "`n"
 	}
}
MsgBox,	% OutputData

3 (изменено: Mambr, 2016-12-19 00:40:33)

Re: AHK: Текст-разделить строки по символу и удалить символы во 2-й части

ypppu, благодарю за ответ!

Нечто подобное я уже делал:

Data =
(
Вася, который Пупкин-балда, балбес, лох
Петя, который Булкин-обжора, толстый, плюшкоед
Вася, который Пупкин-пофигист, анархист, раздолбай
Петя, который Булкин-очкарик, зануда, нытик
)

Loop parse, Data, `n, `r
	{
	If A_LoopField contains Булкин
		{
		OutputData .= RegExReplace(A_LoopField, "(.*Булкин-)(.*)", "$1"
		. StrReplace(RegExReplace(A_LoopField, "(.*)-"), ",", "", "All") "`n")
		}
	}

MsgBox % OutputData

Вариантов - куча, но на выхлопе получается:

Петя, который Булкин-обжора толстый плюшкоед
Петя, который Булкин-очкарик зануда нытик

а надо так:

Вася, который Пупкин-балда, балбес, лох
Петя, который Булкин-обжора толстый плюшкоед (строка без запятых после "-")
Вася, который Пупкин-пофигист, анархист, раздолбай
Петя, который Булкин-очкарик зануда нытик (строка без запятых после "-")

Текст нужен полностью, но с измененными ЭТИМИ строками ....

4

Re: AHK: Текст-разделить строки по символу и удалить символы во 2-й части

Data =
(
Вася, который Пупкин-балда, балбес, лох
Петя, который Булкин-обжора, толстый, плюшкоед
Вася, который Пупкин-пофигист, анархист, раздолбай
Петя, который Булкин-очкарик, зануда, нытик
)

keyWord := "Булкин"

Loop, parse, Data, `n, `r
   str1 .= (A_Index = 1 ? "" : "`r`n") . (InStr(A_LoopField, keyWord) ? RegExReplace(A_LoopField, ",(?!.*-)") : A_LoopField)

MsgBox, % str1

; или так:
while RegExMatch(Data, "O).+?(\R|$)", s, A_Index = 1 ? 1 : s.Pos(0) + s.Len(0))
   str2 .= InStr(s[0], keyWord) ? RegExReplace(s[0], ",(?!.*-)") : s[0]

MsgBox, % str2
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Текст-разделить строки по символу и удалить символы во 2-й части

Mambr пишет:

а надо так:

Я думал Вы догадаетесь. В моём коде перед последней фигурной скобкой добавить

Else OutputData .= A_LoopField . "`n"

6 (изменено: Mambr, 2016-12-19 08:42:43)

Re: AHK: Текст-разделить строки по символу и удалить символы во 2-й части

ypppu, ну конечно же! Все верно!

Else OutputData .= A_LoopField . "`n"

Это сработало бы и в моем варианте. Просто уже мозг заклинило и решая более сложную задачу, начал "тормозить" на элементарных вещах!

teadrinker, большущее спасиба!
Что тут можно сказать ... Краткость - сестра таланта!

Ребята, благодарю всех! Вопрос решен.