Что нового

[Данные, строки] Как поймать с пом. рег. выр. строчки выше известных

Tapok

Чайник
Сообщения
203
Репутация
0
Версия AutoIt: 3.3.12.0

Описание: Работа с регулярными выражениями

Примечания: Поиск строки, расположенной по тексту выше, чем известная строка

Дано:

Код:
Файл "Блок итогового контроля_xml.txt" в котором надо поймать вопросы и ответы на них.
Сам файл в приложении "Блок итогового контроля_xml.txt".
Примерно то, что должно получиться - в приложении "Результат.txt".

Предварительно выявилось, что искомый текст расположен на 1 или 2 строчки выше чем текст "Бордюр: нет" или "Бордюр: да"

Например: название темы расположено так (с невидимыми символами):

Код:
Блок итогового контроля успеваемости по КОП
CRLF
"Эхолот НЭЛ-1000М: устройство, работа и основы эксплуатации"CRLF
CRLF
Бордюр: нетCRLF

Один из вопросов расположен так (остальные так же):

Код:
На чем основан принцип действия эхолота?CRLF
CRLF
Бордюр: даCRLF

При этом во всех случаях вблизи (выше) есть какой-то большой текст типа:

Код:
Текст:    <!-- /* Font Definitions */ @font-face {font-family:"Arial CYR";
 panose-1:2 11 6 4 2 2 2 2 2 4;} @font-face {font-family:"Times New Roman CYR";
 panose-1:2 2 6 3 5 4 5 2 3 4;} /* Style Definitions */ p.MsoNormal, 
li.MsoNormal, div.MsoNormal {margin-top:0cm; margin-right:0cm;
 margin-bottom:10.0pt; margin-left:0cm; line-height:115%; font-size:11.0pt;
 font-family:"Calibri","sans-serif";} .MsoChpDefault {font-size:11.0pt;}
 .MsoPapDefault {margin-bottom:10.0pt; line-height:115%;} /* Page Definitions */ 
@page WordSection1 {size:612.0pt 792.0pt; margin:2.0cm 42.5pt 2.0cm 3.0cm;}
 div.WordSection1 {page:WordSection1;} -->

Как вытащить вопросы и ответы, расположенные выше по тексту, чем то, на что я хочу опереться ("Бордюр: да" или "Бордюр: нет") :-\
 

Вложения

edyapd

Осваивающий
Сообщения
380
Репутация
30
Так пойдёт?
Код:
#include <String.au3>
#include <File.au3>

$sFileName = "Блок итогового контроля_xml.txt"
$hFile = FileOpen($sFileName)
$sData = FileRead($hFile)
FileClose($hFile)
$aString = _StringBetween($sData, "-->  " & @CRLF & @CRLF, @CRLF & "Бордюр:")
$sFileName = "Результат.txt"
$hFile = FileOpen($sFileName, 10)
_FileWriteFromArray($hFile, $aString)
FileClose($hFile)
 
АТ
T

Tapok

Чайник
Сообщения
203
Репутация
0
Волшебство! Да, подойдет! Большое спасибо!

P.S. На некоторые вопросы выводит одинаковые ответы, но это видимо можно убрать уже работая со строками в полученном файле.

Можно еще попытаться выделить правильный ответ. По тексту он выглядит так:

Код:
Имя: Текст5прав
где цифра внутри текста меняется, может быть так:

Код:
Имя: Текст1прав
Текст всегда стоит в таком окружении:

Код:
Общие: 

Имя: Текст2прав
Блокировка: нет
Правильный ответ можно пометить символами после ответа, скажем так:

Код:
За какое время емкость памяти обеспечивает регистрацию полученной эхолотом 
информации в процессе работы?

16 часов
20 часов
24 часа ===
36 часов
72 часов

!!!

Более детальный анализ показал, что два одинаковых ответа показываются как раз в случае, когда это правильный ответ! Так что информация о правильных ответах в вышеприведенном коде тоже присутствует!

Еще раз спасибо!
 
Верх