Что нового

[Данные, строки] Как удалить повторяющиеся строки и пометить их

Tapok

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

Описание: Как удалить повторяющиеся строки и пометить их

Есть текст:

Код:
Сколько потребуется времени?
16 часов
20 часов
24 часа
24 часа
36 часов
72 часов
В каких режимах работает программа?
Б6
СГ
РУЧ
РУЧ
МГ
БГ
АВТ
АВТ

Если ответ повторяется - значит он правильный, удаляем повтор и помечаем его "+" перед ответом (правильных ответов может быть несколько)
Строку с вопросом помечаем как "Вопрос 1" (следующую "Вопрос 2" и т.д.)
Строку с ответом помечаем как "Ответ 1" (следующий ответ "Ответ 1" и т.д.)
Блоки вопросов разделяем пустой строкой.

В итоге должны получить такой результат:

Код:
Вопрос 1
Сколько потребуется времени?
Ответ 1
16 часов
Ответ 2
20 часов
+Ответ 3
24 часа
Ответ 4
36 часов
Ответ 5
72 часов

Вопрос 2
В каких режимах работает программа?
Ответ 1
Б6
Ответ 2
СГ
+Ответ 3
РУЧ
Ответ 4
МГ
Ответ 5
БГ
+Ответ 6
АВТ
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
OffTopic:
Tapok, вы бы попробовали хоть немного самостоятельно разобраться, а то все ваши посты в столе заказов. Так вы вряд ли чему-нибудь научитесь.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Код:
$sData = _
	'Сколько потребуется времени?' & @CRLF & _
	'16 часов' & @CRLF & _
	'20 часов' & @CRLF & _
	'24 часа' & @CRLF & _
	'24 часа' & @CRLF & _
	'36 часов' & @CRLF & _
	'72 часов' & @CRLF & _
	'В каких режимах работает программа?' & @CRLF & _
	'Б6' & @CRLF & _
	'СГ' & @CRLF & _
	'РУЧ' & @CRLF & _
	'РУЧ' & @CRLF & _
	'МГ' & @CRLF & _
	'БГ' & @CRLF & _
	'АВТ' & @CRLF & _
	'АВТ'

$aSplit = StringSplit(StringStripCR($sData), @LF)
$sData = ''
$iQ = 0
$iA = 0
$sTmp = @LF

For $i = 1 To $aSplit[0]
	If StringInStr($aSplit[$i], '?', 2) Then
		If $sData Then
			$sData &= @CRLF
		EndIf
		
		$iQ += 1
		$iA = 0
		$sData &= 'Вопрос ' & $iQ & @CRLF & $aSplit[$i] & @CRLF
		$sTmp = @LF
	Else
		If StringInStr($sTmp, @LF & $aSplit[$i] & @LF, 2) Then
			$sData = StringReplace($sData, 'Ответ ' & $iA & @CRLF & $aSplit[$i] & @CRLF, '+Ответ ' & $iA & @CRLF & $aSplit[$i] & @CRLF, 0, 2)
		Else
			$sTmp &= $aSplit[$i] & @LF
			$iA += 1
			$sData &= 'Ответ ' & $iA & @CRLF & $aSplit[$i] & @CRLF
		EndIf
	EndIf
Next

ConsoleWrite($sData & @LF)
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
CreatoR

Небольшое предположение: какая есть вероятность, что ответы будут совпадать в различных вопросах.
Код:
$sData = _
    '[1] Сколько ***?' & @CRLF & _
    '16 часов' & @CRLF & _
    '20 часов' & @CRLF & _
        '24 часа' & @CRLF & _
        '24 часа' & @CRLF & _
    '36 часов' & @CRLF & _
    '72 часов' & @CRLF & _
    '[2] Сколько *** ?' & @CRLF & _
    '16 часов' & @CRLF & _
    '20 часов' & @CRLF & _
    '24 часа' & @CRLF & _
    '36 часов' & @CRLF & _
        '72 часов' & @CRLF & _
        '72 часов' & @CRLF & _
    '[3] Сколько *** ?' & @CRLF & _
    '16 часов' & @CRLF & _
    '20 часов' & @CRLF & _
    '24 часа' & @CRLF & _
        '36 часов' & @CRLF & _
        '36 часов' & @CRLF & _
    '72 часов'


PS: критиковать все умеют - знаю, знаю))))) :beer:
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
---Zak--- [?]
какая есть вероятность, что ответы будут совпадать в различных вопросах
Это нужно спросить у автора темы, я дал вариант для поставленной задачи с предоставленными данными.
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
CreatoR, большое спасибо за работающий код!

Yashied сказал(а):
OffTopic:
Tapok, вы бы попробовали хоть немного самостоятельно разобраться, а то все ваши посты в столе заказов. Так вы вряд ли чему-нибудь научитесь.

Согласен, буду стараться меньше обращаться за помощью и писать сам.
В то же время видеть, анализировать и перенимать полезные моменты в коде, который пишет профессионал - это, я считаю, не так плохо. Толку, от того, что я напишу кривой код, который будет работать, не так много. Как кмс по шахматам, могу сказать, что разбор партий мастеров это самое полезное для совершенствования игры, так же и тут.

Еще раз спасибо за код! :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
OffTopic:
Tapok [?]
что разбор партий мастеров это самое полезное для совершенствования игры
но если сам не создаешь свою "игру" (читай код) с нуля, то нет смысла разбирать

Толку, от того, что я напишу кривой код, который будет работать, не так много.
не пойму, как с такой неуверенностью можно стать кмс?
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Сойдемся на том, что для совершенствования в программировании желательно стараться писать, как получается, самому :smile: Благо хелп на Autoit на русском и очень хороший, а если что, тут помогут, не оставят в непонятках :smile:
 
Верх