1 (изменено: Skare, 2011-04-11 14:46:38)

Тема: AHK: Извлечение определённого текста из текстового файла

Существует текстовый файлик, в котором хранится много вот таких "заказов":

$WebFlags:  V
StatusDatePrevious:  25.02.2011 00:00:00
Author:  CN=Priemschik/O=*****
RequestUID:  2958C95900EF6009C2257841004733D0
FormVersion:  1.0
RequestNumber:  703589
RequestDate:  24.02.2011
RequestTime:  14:57:36
RequestCategory:  СООО "Компания", ул.Пупкина
RequestDateEnd:  10.03.2011
RequestTimeEnd:  14:57:36
RequestStatus:  Выдан
PhoneWithoutGuarantee:  
PhoneGuaranteeDate:  24.02.2011
ClientType:  1
ClientName: Человек Обыкновенный
ClientAddress:  г. Минск, пр. Пупкина
PersonPhone:  8 029 ******
Description:  
PhoneName:   GS106
PhoneIMEI:  359935031580099
PhoneSerial:  011FCTB158009
PhoneGuarantee:  0
PhoneSets:  АКБ с/н SBPL0090501LLL101113,ЗУ с/н RB0X0196502,Гарнитура
PhoneWithoutOpen:  1
PhoneAddInfo:  
Defect:  Корпус потерт
Disrepair:  Выдать заключение,Обрывается связь ,Не срабатывает будильник
DisrepairAddInfo:  
CostParts:  0
PhoneExpertise:  В ходе диагностики было произведено восстановление программного обеспечения, заявленные дефекты не подтвердились.
ReplacementNeed:  
ReplacementIMEI:  
ReplacementSerial:  
ReplacementWorks:  
ehCommentList:  
eh1:  1,2,3,4,5,6,7
eh2:  Новый заказ,Готов к выдаче,Готов к выдаче,Готов к выдаче,Готов к выдаче,Готов к выдаче,Выдан
eh3:  Priemschik,Priemschik,Vasilii,Vasilii,Vasilii,Priemschik,Priemschik
eh4:  02/24/2011   15:00:09,02/25/2011   10:42:53,02/25/2011   13:22:10,02/25/2011   13:22:20,02/25/2011   13:22:26,02/25/2011   11:16:23,02/25/2011   11:16:25
ehComment:  
DocumentTitle:  Заказ №703589
StoreServer:  
StoreDB:  
NDS:  Сервисный центр "Центр сервисный", ООО "Технологии"
RequestDateFormatted:  2011.02.24
Status:  Выдан
PhoneDelivery:  1
PayDate:  25.02.2011
PayDateFormatted:  2011.02.25
CostService:  0
CostAll:  0
$UpdatedBy:  CN=Priemschik/O=****,CN=Alexey/O=,*****CN=Priemschik/O=*****
$Revisions:  24.02.2011 15:00:15,25.02.2011 10:43:03,25.02.2011 13:22:20,25.02.2011 13:22:31,25.02.2011 13:22:37,28.02.2011 11:16:10

Нужно, что бы при введении мной номера "заказа"(RequestNumber:  703589) Скрипт сам находил в этом текстовом файле конкретную информацию об этом заказе и заносил её куда-нибудь, а точнее, нужно лишь то, что находится после RequestDate,Disrepair,ClientName:,ClientAddress:,PersonPhone:.Прошу помощи, ибо у самого ничерта не получается:(.

2

Re: AHK: Извлечение определённого текста из текстового файла

Skare пишет:

Существует текстовый файлик, в котором хранится много вот таких "заказов":

Нужно увидеть, как выглядит часть файла по-крайней мере с несколькими заказами.

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

3 (изменено: Skare, 2011-04-10 20:04:37)

Re: AHK: Извлечение определённого текста из текстового файла

$WebFlags:  V
StatusDatePrevious:  25.02.2011 00:00:00
Author:  CN=Priemschik/O=*****
RequestUID:  2958C95900EF6009C2257841004733D0
FormVersion:  1.0
RequestNumber:  703589
RequestDate:  24.02.2011
RequestTime:  14:57:36
RequestCategory:  СООО "Компания", ул.Пупкина
RequestDateEnd:  10.03.2011
RequestTimeEnd:  14:57:36
RequestStatus:  Выдан
PhoneWithoutGuarantee:  
PhoneGuaranteeDate:  24.02.2011
ClientType:  1
ClientName: Человек Обыкновенный
ClientAddress:  г. Минск, пр. Пупкина
PersonPhone:  8 029 ******
Description:  
PhoneName:   GS106
PhoneIMEI:  359935031580099
PhoneSerial:  011FCTB158009
PhoneGuarantee:  0
PhoneSets:  АКБ с/н SBPL0090501LLL101113,ЗУ с/н RB0X0196502,Гарнитура
PhoneWithoutOpen:  1
PhoneAddInfo:  
Defect:  Корпус потерт
Disrepair:  Выдать заключение,Обрывается связь ,Не срабатывает будильник
DisrepairAddInfo:  
CostParts:  0
PhoneExpertise:  В ходе диагностики было произведено восстановление программного обеспечения, заявленные дефекты не подтвердились.
ReplacementNeed:  
ReplacementIMEI:  
ReplacementSerial:  
ReplacementWorks:  
ehCommentList:  
eh1:  1,2,3,4,5,6,7
eh2:  Новый заказ,Готов к выдаче,Готов к выдаче,Готов к выдаче,Готов к выдаче,Готов к выдаче,Выдан
eh3:  Priemschik,Priemschik,Vasilii,Vasilii,Vasilii,Priemschik,Priemschik
eh4:  02/24/2011   15:00:09,02/25/2011   10:42:53,02/25/2011   13:22:10,02/25/2011   13:22:20,02/25/2011   13:22:26,02/25/2011   11:16:23,02/25/2011   11:16:25
ehComment:  
DocumentTitle:  Заказ №703589
StoreServer:  
StoreDB:  
NDS:  Сервисный центр "Центр сервисный", ООО "Технологии"
RequestDateFormatted:  2011.02.24
Status:  Выдан
PhoneDelivery:  1
PayDate:  25.02.2011
PayDateFormatted:  2011.02.25
CostService:  0
CostAll:  0
$UpdatedBy:  CN=Priemschik/O=****,CN=Alexey/O=,*****CN=Priemschik/O=*****
$Revisions:  24.02.2011 15:00:15,25.02.2011 10:43:03,25.02.2011 13:22:20,25.02.2011 13:22:31,25.02.2011 13:22:37,28.02.2011 11:16:10


$WebFlags:  V
StatusDatePrevious:  26.01.2011 23:00:00
Author:  CN=Priemschik/O=*****
RequestUID:  4C7881C9E26EDF76C225781F00396731
FormVersion:  1.0
RequestNumber:  702466
RequestDate:  19.01.2011
RequestTime:  12:27:33
RequestCategory:  СООО "Компания2", пр. Независимости 95
RequestDateEnd:  02.02.2011
RequestTimeEnd:  12:27:33
RequestStatus:  Выдан
PhoneWithoutGuarantee:  
PhoneGuaranteeDate:  21.01.2011
ClientType:  1
ClientName:  СООО "Компания"Фамилия Д.Е.
ClientAddress:  г.Волковысск,ул.Пупкина
PersonPhone:  8841450
Description:  
PhoneName:  LG GS106
PhoneIMEI:  359935031579323
PhoneSerial:  011FCQX157932
PhoneGuarantee:  0
PhoneSets:  АКБ с\н SBPL0090501LLL101113
PhoneWithoutOpen:  1
PhoneAddInfo:  
Defect:  Незначительные потертости
Disrepair:  клавиши на прием и отбой вызова не работают
DisrepairAddInfo:  
CostParts:  0
PhoneExpertise:  
ReplacementNeed:  
ReplacementIMEI:  
ReplacementSerial:  
ReplacementWorks:  
ehCommentList:  
eh1:  1,2,3,4,5
eh2:  Новый заказ,Новый заказ,Готов к выдаче,Готов к выдаче,Выдан
eh3:  Priemschik,Priemschik,Priemschik,Andrey,Andrey
eh4:  01/21/2011   12:31:19,01/21/2011   12:31:28,01/27/2011   14:14:37,01/27/2011   17:22:34,01/27/2011   17:22:35
ehComment:  
DocumentTitle:  Заказ №702466
StoreServer:  
StoreDB:  
NDS:  Сервисный центр "****" ООО "Технологии"
RequestDateFormatted:  2011.01.19
Status:  Выдан
PhoneDelivery:  1
PayDate:  27.01.2011
PayDateFormatted:  2011.01.27
CostService:  0
CostAll:  0
$UpdatedBy:  CN=Priemschik/O=***,CN=Andreyo/O=****
$Revisions:  21.01.2011 12:30:45,21.01.2011 12:30:54,27.01.2011 14:15:49,27.01.2011 17:23:50


$WebFlags:  V
StatusDatePrevious:  09.03.2011 00:00:00
Author:  CN=Priemschik/O=****
RequestUID:  B51BA3D1790E3188C22578480053D819
FormVersion:  1.0
RequestNumber:  703750
RequestDate:  03.03.2011
RequestTime:  17:15:54
RequestCategory:  СООО "Компания2", пр. Независимости 95
RequestDateEnd:  17.03.2011
RequestTimeEnd:  17:15:54
RequestStatus:  Выдан
PhoneWithoutGuarantee:  
PhoneGuaranteeDate:  03.03.2011
ClientType:  1
ClientName:  СООО "Компания" Фамилия Н.Н.
ClientAddress:  г. Минск, пр.Пупкина
PersonPhone:  853
Description:  
PhoneName:  LG GS106
PhoneIMEI:  359935031578085
PhoneSerial:  011FCPY157808
PhoneGuarantee:  0
PhoneSets:  АКБ с/н SBPL0090501LLL101113
PhoneWithoutOpen:  1
PhoneAddInfo:  
Defect:  Корпус потерт
Disrepair:  При принятии входящего вызова на дисплее отображается начало разговора но связь прерывается и ТА становится недоступным
DisrepairAddInfo:  
CostParts:  0
PhoneExpertise:  
ReplacementNeed:  
ReplacementIMEI:  
ReplacementSerial:  
ReplacementWorks:  
ehCommentList:  
eh1:  1,2,3,4
eh2:  Новый заказ,Готов к выдаче,Готов к выдаче,Выдан
eh3:  Priemschik,Priemschik,Priemschik,Priemschik
eh4:  03/03/2011   17:18:44,03/09/2011   11:47:38,03/09/2011   17:49:42,03/09/2011   17:49:44
ehComment:  
DocumentTitle:  Заказ №703750
StoreServer:  
StoreDB:  
NDS:  Сервисный центр "*****" ООО "Технологии"
RequestDateFormatted:  2011.03.03
Status:  Выдан
PhoneDelivery:  1
PayDate:  09.03.2011
PayDateFormatted:  2011.03.09
CostService:  0
CostAll:  0
$UpdatedBy:  CN=Priemschik/O=****
$Revisions:  03.03.2011 17:18:37,09.03.2011 11:48:14,09.03.2011 17:50:13

Вот, 3 заказа:). Если нужно, то разделять каждый заказ можно заданным ранее символом.

4

Re: AHK: Извлечение определённого текста из текстового файла

FilePath =  ; указать путь к текстовому файлу

RequestNumber = 703589
Items = RequestDate,Disrepair,ClientName,ClientAddress,PersonPhone

FileRead, Text, % FilePath
Loop, parse, Items, `,, %A_Space%
   %A_LoopField% := RegExReplace(Text
      , "s).*RequestNumber:[ \t]*" RequestNumber ".*?" A_LoopField ":[ \t]*(.*?)\R.*", "$1")
      
; теперь все значения в переменных с соответствующими названиями,
; следующая часть кода только для демонстрации:
Loop, parse, Items, `,, %A_Space%
   MsgBox, % A_LoopField " = " %A_LoopField%
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Извлечение определённого текста из текстового файла

Спасибо, всё работает, но только с заказами, которые где-то в начале, при проверке заказа из середины\конца текстового файла выдаёт непонятное окошко, в котором отображается всё содержимое этого файла. Можешь есть какая-то другая команда, заменяющая FileRead, для работы с более большими файлами?:)

6

Re: AHK: Извлечение определённого текста из текстового файла

А какой размер файла?

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

7

Re: AHK: Извлечение определённого текста из текстового файла

37.5 мегабайт.

8

Re: AHK: Извлечение определённого текста из текстового файла

FileRead по умолчанию работает с файлами до 1GB, значит проблема не в этом. Для отладки нужно видеть весь файл, можешь закачать на какой-нибудь файлообменник.

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

9

Re: AHK: Извлечение определённого текста из текстового файла

http://ifolder.ru/22900623
Вот, конкретно в этом файле скрипт не работает вообще:(. В более мелких - может найти что-нибудь в начале, но где-нибудь в середине не хочет:(.

10

Re: AHK: Извлечение определённого текста из текстового файла

Skare, ссылки оформляем тэгом «url». Я поправил Ваш пост.

11 (изменено: Skare, 2011-04-11 18:42:17)

Re: AHK: Извлечение определённого текста из текстового файла

Ах, нет, проблема оказалась немного в другом. "Заказы" МТСа, которые заносились с примерно 25 марта имеют немного другую форму заполнения и из-за этого, наверное, скрипт "тупит" на них. Можно ли это как-то обойти?:)
Вот 1 из этих заказов:

$WebFlags:  V
StatusDatePrevious:  28.03.2011 00:00:00
Author:  CN=Priemschik/O=***
RequestUID:  3C8432832562FA0AC225785B00517364
RequestNumber:  704174
FormVersion:  1.0
RequestNumberMTS:  
RequestDate:  22.03.2011
RequestTime:  16:49:43
RequestCategory:  СООО "Общество", пр. Пупкина
RequestDateEnd:  05.04.2011
RequestTimeEnd:  16:49:43
RequestStatus:  Выдан
PhoneWithoutGuarantee:  
PhoneGuaranteeDate:  22.03.2011
ClientType:  1
ClientName:  СООО "Мобильные" Иванов С.Н.
ClientAddress:  Гродно,ул.Горького
PersonPhone:  8 02958***
Description:  
PhoneType:  LG
PhoneName:  LG GD350
PhoneIMEI:  358733030385185
PhoneSerial:  005CQUK038518
PhoneGuarantee:  0
PhoneSets:  АКБ с\н SBPP0028301SJB100329
PhoneWithoutOpen:  1
PhoneAddInfo:  
Defect:  Незначительные потертости
Disrepair:  заряжается только в выключенном состоянии,в книге контактов сами копируются контакты
DisrepairAddInfo:  
CostParts:  0
PhoneExpertise:  
ReplacementNeed:  
ReplacementIMEI:  
ReplacementSerial:  
ReplacementWorks:  
ehCommentList:  
eh1:  1,2,3,4,5
eh2:  Новый заказ,Новый заказ,Готов к выдаче,Готов к выдаче,Выдан
eh3:  Priemschik,Priemschik,Priemschik,Priemschik,Priemschik
eh4:  03/22/2011   16:51:43,03/22/2011   16:51:58,03/24/2011   16:38:40,03/28/2011   16:51:41,03/28/2011   16:51:42
ehComment:  
DocumentTitle:  Заказ №704174
StoreServer:  
StoreDB:  
NDS:  Сервисный центр "**" ООО "Технологии"
RequestDateFormatted:  2011.03.22
Status:  Выдан
PhoneDelivery:  1
PayDate:  28.03.2011
PayDateFormatted:  2011.03.28
CostService:  0
CostAll:  0
$UpdatedBy:  CN=Priemschik/O=****
$Revisions:  22.03.2011 16:51:40,22.03.2011 16:51:55,24.03.2011 16:38:52,28.03.2011 16:51:34

Отличаются весьма не сильно, а создают столько проблем:(.

12 (изменено: teadrinker, 2011-04-11 18:51:00)

Re: AHK: Извлечение определённого текста из текстового файла

Вот так должно сработать:

#NoEnv
FilePath =  ; указать путь к текстовому файлу

RequestNumber = 704174
Items = RequestDate,Disrepair,ClientName,ClientAddress,PersonPhone

FileRead, Text, % FilePath

RegExMatch(Text, "s)RequestNumber:[ \t]*" RequestNumber ".*?Revisions:", Found)
Loop, parse, Items, `,, %A_Space%
{
   RegExMatch(Found, "s).*?" A_LoopField ":[ \t]*(.*?)\R", %A_LoopField%)
   %A_LoopField% := %A_LoopField%1
}
      
; теперь все значения в переменных с соответствующими названиями,
; следующая часть кода только для демонстрации:
Loop, parse, Items, `,, %A_Space%
   MsgBox, % A_LoopField " = " %A_LoopField%
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Извлечение определённого текста из текстового файла

Отредактировал немного, ограничил поиск словом "Revisions:", иначе последний заказ не будет определяться.

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

14 (изменено: Skare, 2011-04-11 19:03:03)

Re: AHK: Извлечение определённого текста из текстового файла

Странно, если ищу в более маленьком файлике с заказами, то в переменных пусто, если в большом, то всё работает:).

15

Re: AHK: Извлечение определённого текста из текстового файла

У меня работает и в примере с тремя заказами, и в большом файле. Присылай, в котором не работает .
И проверь сначала правильность пути к файлам и номер заказа.

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

16

Re: AHK: Извлечение определённого текста из текстового файла

Спасибо большое! Всё прекрасно работает там, где нужно. Просто есть вот этот "большой" файл, он "склеен" из 4ёх баз от разных операторов, так вот, в той базе, откуда взят ,к примеру, заказ 704174 он не определяется, а в этом большом всё прекрасно работает:). В общем, не важно. Огромное спасибо за помощь:).

17 (изменено: Skare, 2011-04-12 17:22:24)

Re: AHK: Извлечение определённого текста из текстового файла

А можно ли сделать так, что бы из даты бралось только 10 первых знаков?:) Иногда дата выглядит вот так RequestDate:  02.04.2011 00:00:00, т.е. туда вписывается ещё и время...
Всё, додумался сам:).
Надо было лишь добавить 2 строки:

IfInString, RequestDate, 00:00:00
StringTrimRight, RequestDate, RequestDate, 8

18

Re: AHK: Извлечение определённого текста из текстового файла

А можно ли сделать так, что бы проверяло есть ли в переменной PersonPhone запятая, если есть, то убрать всё, что после запятой?:)

19

Re: AHK: Извлечение определённого текста из текстового файла

А запятую оставить?

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

20

Re: AHK: Извлечение определённого текста из текстового файла

Не имеет значения, можно убрать.

21

Re: AHK: Извлечение определённого текста из текстового файла

PersonPhone = 1234, 56789
MsgBox, % RegExReplace(PersonPhone, "(.*?),.*", "$1")

Кстати, справка по RegEx есть в переводе.

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

22

Re: AHK: Извлечение определённого текста из текстового файла

Спасибо! Да, читал я эту справку, не понял ничерта:(.