Автор Тема: [RegExp] Найти пустую строку?  (Прочитано 8462 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Alex Bit [?]

  • Новичок
  • *
  • Сообщений: 24
  • Репутация: 0
    • Награды
Доброго времени суток.Рад что ресурс опять заработал.
У меня вопрос следующего содержания:
Открываем файл ТХТ.В нем находим строки не содержащие определенного слова и делаем преобразование строки -
Код: AutoIt [Выделить]
 If Not StringRegExp ($sLine, '(?i)\h*(when \w+)') Then
                  If StringRegExp ($sLine, '(?i)([a-z0-9-]+)\h*=\h*([a-z]+)') Then
                    $sRet = StringRegExpReplace($sLine, '(?i)([a-z0-9-]+)\h*=\h*([a-z]+)' , '$\1 = "\2"')
                        Return $sRet
                  EndIf
          If StringRegExp ($sLine, '(?i)([a-z0-9-]+)\h*=\h*([0-9]+)') Then
                        $sRet = StringRegExpReplace($sLine, '(?i)([a-z0-9-]+)\h*=\h*([0-9]+)' , '$\1 = \2')
            Return $sRet
        EndIf
   
    EndIf

 
Помогите составить код чтобы он отправлял на функции:
1.Линии не содержащие ни одного слова (вертикальные "пробелы")
2.Первыми символами стоит " \\ "
3.В строке есть определенное слово(When)
4.В строке нет определенного слова(When)
5.В строке есть определенное слово(When)или(raisemax) ,но нет второго определенного слова(force)
MaxSessionHands = 10000
MaxSessionTime = 360
AutoRebuyAtUB = OFF

custom
preflop


//always play aces and kings

When (hand=AA or hand=KK)
when raises>0 raisemax force

//when re-raised, push/fold according to stacksize

when raises=1 and botslastaction=raise
when totalinvested > 50% Stacksize raisemax force
when totalinvested > 33% Stacksize and (hand=TT or hand=99 or hand=AQ) raisemax force


when others
when others fold force

flop

When totalinvested > 120% stacksize and paironboard and (bets = 1 or raises >= 1) and not (NutFullHouseOrFourOfAKind = 2  or NutFullHouseOrFourOfAKind = 1  or NutFullHouseOrFourOfAKind = 3 or NutFullHouseOrFourOfAKind = 4  or HaveQuads  or HaveStraightFlush) and (haveoverpair or have2ndoverpair or haveunderpair or havetoppair or have2ndtoppair or havetrips or havestraight or haveflush or havestraightdraw or haveflushdraw) call force



turn

When totalinvested > 120% stacksize and paironboard and (bets = 1 or raises >= 1) and not (NutFullHouseOrFourOfAKind = 2  or NutFullHouseOrFourOfAKind = 1  or NutFullHouseOrFourOfAKind = 3 or NutFullHouseOrFourOfAKind = 4  or HaveQuads  or HaveStraightFlush) and (haveoverpair or have2ndoverpair or haveunderpair or havetoppair or have2ndtoppair or havetrips or havestraight or haveflush or havestraightdraw or haveflushdraw) call force

river

When totalinvested > 120% stacksize and paironboard and (bets = 1 or raises >= 1) and not (NutFullHouseOrFourOfAKind = 2  or NutFullHouseOrFourOfAKind = 1  or NutFullHouseOrFourOfAKind = 3 or NutFullHouseOrFourOfAKind = 4  or HaveQuads  or HaveStraightFlush) and (haveoverpair or have2ndoverpair or haveunderpair or havetoppair or have2ndtoppair or havetrips or havestraight or haveflush or havestraightdraw or haveflushdraw) call force


Русское сообщество AutoIt

[RegExp] Найти пустую строку?
« Отправлен: Июнь 22, 2011, 07:59:43 »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #1, Отправлен: Июнь 22, 2011, 14:39:55 »
Alex Bit
Ты это хотел получить ?
Код: AutoIt [Выделить]
#include<Array.au3>
$sText=ClipGet()
MsgBox(0,'$sText', $sText )
$sText=StringRegExpReplace ( $sText ,'(?://.*|.*force.*)\r\n','' )
MsgBox(0,'$sText', $sText )
$aRet=StringRegExp ( $sText ,'(?i)(.*(?:When|raisemax).*)\r\n',3 )
_ArrayDisplay($aRet)
 


или надо раздельно по каждому условию ?
Самая большая проблема – её сформулировать. 

Оффлайн Alex Bit [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #2, Отправлен: Июнь 22, 2011, 15:09:12 »
Красиво! :laugh:
Но мне надо по каждому условию.Я затем каждую строку попадающую под условие буду пере конвертировать.


Добавлено: Июнь 22, 2011, 15:51:17
Вопрос. Если я поменяю условие в твоем коде на -
Код: AutoIt [Выделить]
$sText=StringRegExpReplace ( $sText ,'(?://.*|\r\n)\r\n','' )

Почему после слова - preflop сохраняется вертикальный пробел
« Последнее редактирование: Июнь 22, 2011, 15:51:17 от Alex Bit, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: [RegExp] Найти пустую строку?
« Ответ #2 Отправлен: Июнь 22, 2011, 15:09:12 »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #3, Отправлен: Июнь 22, 2011, 16:02:33 »
Alex Bit  [?]
Цитировать
о мне надо по каждому условию

Тогда так ? :
Код: AutoIt [Выделить]
#include<Array.au3>
$sText=ClipGet()
MsgBox(0,'$sText', $sText )
$aLine=StringSplit($sText, @CRLF,1)
_ArrayDisplay($aLine, "$aLine")
For $i=1 To UBound($aLine)-1
    If StringRegExp ( $aLine[$i] ,'^\h*$') Then MsgBox(0, "Line : " &$i , "Это пустая строка")
    If  StringRegExp ( $aLine[$i] ,'^\/\/.*$') Then MsgBox(0, "Line : " &$i , "Строка начинается с '//'"  & @CRLF & $aLine[$i] )
    If StringRegExp ( $aLine[$i] ,'(?i)^.*When.*$') Then MsgBox(0, "Line : " &$i , "В строке имеется 'When'"  & @CRLF & $aLine[$i] )
    If StringRegExp ( $aLine[$i] ,'(?i)^.*force.*$')Then ContinueLoop
    If StringRegExp ($aLine[$i] ,'(?i)^.*(When|raisemax).*$') Then MsgBox(0, "Line : " &$i , 'В строке имеется "When" или  "raisemax" и отсутствует слово : "force"' & @CRLF & $aLine[$i] )
Next
 


Оффлайн Alex Bit [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #4, Отправлен: Июнь 22, 2011, 16:20:58 »
Прошу прощения .Не увидел что дальше по тексту получается лажа.Мне нужно из текста убрать пустые строки  и \\комментарии .Я пока не могу настроить свой мозг на мышление AutoIT(программирую микросхемы).По моему мнению алгоритм должен быть следующий:
1 Считываем строку N
   если строка пустая считываем следующую строку
     если строка не пустая проверяем условие есть ли слово when
          если нет слова when переход на функцию обработки строки без слова when
          если есть слово when то соответственно переход на обработку строки со словом when
Функция обработки строки без слова when
   Если в строке присутствует знак равенства то переход на функцию равенство
   Если нет то строка остается без изменения.
Функция обработки строки со  словом when
   Если есть слово forse то перход на функцию when&forse
   Если нет то переход на функцию when not forst
В моем понимании это так.Но у вас мышление по другому.То что я делаю через задницу - это у вас в одной строчке!!! :think:
 

Русское сообщество AutoIt

Re: [RegExp] Найти пустую строку?
« Ответ #4 Отправлен: Июнь 22, 2011, 16:20:58 »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #5, Отправлен: Июнь 22, 2011, 16:24:06 »
Alex Bit  [?]
Цитировать
Почему после слова - preflop сохраняется вертикальный пробел

Попробуй так :
Код: AutoIt [Выделить]
$sText=StringRegExpReplace ( $sText ,'(?://.*|(?:\r\n){1,})\r\n','' )
 


Оффлайн Alex Bit [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #6, Отправлен: Июнь 22, 2011, 16:28:25 »
gregaz мое вам почтение.Это просто супер.В 5 строчках уместилось , на что у меня ушло бы минимум 1\10 части "Война и мир".Буду пробовать .Возникнут вопросы отпишу или тему поставлю решонной. :ok: :IL_AutoIt_1:


Добавлено: Июнь 22, 2011, 16:38:51
Попробую здесь вопрос задать.(Или надо новую тему открывать)
Как я могу из массива убрать не нужные мне строки?
Мое мнение что нужно создать второй пустой массив и туда переносит нужные мне строки.
« Последнее редактирование: Июнь 22, 2011, 16:38:51 от Alex Bit, Причина: Объединение сообщений »

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #7, Отправлен: Июнь 22, 2011, 16:43:26 »
Alex Bit  [?]
Цитировать
.По моему мнению алгоритм должен быть следующий:

Тогда это будет точно по твоемк алгоритму :
Код: AutoIt [Выделить]
#include<Array.au3>
$sText=ClipGet()
MsgBox(0,'$sText', $sText )
$aLine=StringSplit($sText, @CRLF,1)
_ArrayDisplay($aLine, "$aLine")
For $i=1 To UBound($aLine)-1
    If StringRegExp ( $aLine[$i] ,'^\h*$') Then  ContinueLoop  ;MsgBox(0, "Line : " &$i , "Это пустая строка")
    If StringRegExp ( $aLine[$i] ,'(?i)^.*When.*$') Then
        MsgBox(0, "Line : " &$i , "В строке имеется 'When'"  & @CRLF & $aLine[$i] )
        ;переход на обработку строки со словом when
        If StringInStr( $aLine[$i], "force", 2) Then
            ;====> перход на функцию when&forse
        Else
            ;====>  переход на функцию when not forst
        EndIf
    Else
        MsgBox(0, "Line : " &$i , "В строке отсутствует 'When'"  & @CRLF & $aLine[$i] )
        ; переход на функцию обработки строки без слова when
        If StringInStr( $aLine[$i], "=") Then
            ; ;====> переход на функцию равенство
        EndIf
    EndIf
Next
 

В принципе можно вообще бе Рег.выражений.(StringInStr)
Если уж использовать их, то на полную катушку (сразу для всего текста


Добавлено: Июнь 22, 2011, 16:50:07
Alex Bit  [?]
Цитировать
Попробую здесь вопрос задать.(Или надо новую тему открывать)
Нужно открывать обязательно
А в принципе если задать поиск, то найдешь тему, где это подробно рассматривалось , причем с анализом скорости)
« Последнее редактирование: Июнь 22, 2011, 16:50:07 от gregaz, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: [RegExp] Найти пустую строку?
« Ответ #7 Отправлен: Июнь 22, 2011, 16:43:26 »

Оффлайн Alex Bit [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #8, Отправлен: Июнь 22, 2011, 17:04:16 »
Код: AutoIt [Выделить]
$sText=StringRegExpReplace ( $sText ,'(?://.*|(?:\r\n){1,})\r\n','' )

Делает маленький косяк - между строкой "AutoRebuyAtUB = OFF" и "custom" не достает перехода на новую строку(и далее по тексту в тех местах где имеется более одной пустой строки.


Добавлено: Июнь 22, 2011, 17:08:37
Цитировать
В принципе можно вообще бе Рег.выражений.(StringInStr)
Если уж использовать их, то на полную катушку (сразу для всего текста
Хотелось бы взглянуть на подобные мысли в коде.

Оффлайн gregaz [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1166
  • Репутация: 298
  • Пол: Мужской
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #9, Отправлен: Июнь 22, 2011, 17:33:23 »
Alex Bit  [?]
Цитировать
Хотелось бы взглянуть на подобные мысли в коде.

А что смотреть : ведь вопрос темы не имеет смысла
Ведь если мы находим ,что строка имеет слово скажем "When", то это уже подразумевает, что это не пустая строка
и не нужно возиться с пустой строкой:
Код: AutoIt [Выделить]
#include<Array.au3>
$sText=ClipGet()
MsgBox(0,'$sText', $sText )
$aLine=StringSplit($sText, @CRLF,1)
_ArrayDisplay($aLine, "$aLine")
;For $i=UBound($aLine)-1 To 1 Step -1; **********Для удаления элементов массива******
For $i=1 To UBound($aLine)-1
      If StringInStr( $aLine[$i], "When", 2) Then
        MsgBox(0, "Line : " &$i , "В строке имеется 'When'"  & @CRLF & $aLine[$i] )
        ;переход на обработку строки со словом when
        If StringInStr( $aLine[$i], "force", 2) Then
            ;====> перход на функцию when&forse
        Else
            ;====>  переход на функцию when not forst
        EndIf
    Else
        MsgBox(0, "Line : " &$i , "В строке отсутствует 'When'"  & @CRLF & $aLine[$i] )
        ; переход на функцию обработки строки без слова when
        If StringInStr( $aLine[$i], "=") Then
            ; ;====> переход на функцию равенство
        EndIf
    EndIf
Next

 


А по поводу массивов Рассмотри массив в цикле задом наперед (Step -1) и удаляй сразу не нужные элементы массива в уже процессе проверки
« Последнее редактирование: Июнь 22, 2011, 17:39:57 от gregaz »

Оффлайн Alex Bit [?]

  • Новичок
  • *
  • Сообщений: 24

  • Автор темы
  • Репутация: 0
    • Награды
Re: [RegExp] Найти пустую строку?
« Ответ #10, Отправлен: Июнь 22, 2011, 19:36:26 »
Спасибо за содержательные ответы!!!

Русское сообщество AutoIt

Re: [RegExp] Найти пустую строку?
« Ответ #10 Отправлен: Июнь 22, 2011, 19:36:26 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
7 Ответов
10498 Просмотров
Последний ответ Ноябрь 26, 2011, 19:27:03
от madmasles
6 Ответов
4118 Просмотров
Последний ответ Декабрь 31, 2011, 12:56:58
от Zaramot
0 Ответов
1560 Просмотров
Последний ответ Декабрь 30, 2011, 22:37:02
от Kaster
5 Ответов
6220 Просмотров
Последний ответ Январь 13, 2012, 16:08:00
от BaRsupillamy
4 Ответов
2339 Просмотров
Последний ответ Февраль 17, 2012, 20:22:00
от running-frag
3 Ответов
5906 Просмотров
Последний ответ Июль 01, 2012, 11:15:45
от ViktorSPB
1 Ответов
1770 Просмотров
Последний ответ Октябрь 07, 2013, 09:00:05
от mef-t
1 Ответов
2968 Просмотров
Последний ответ Март 21, 2015, 17:13:42
от Yashied
2 Ответов
757 Просмотров
Последний ответ Апрель 04, 2017, 10:43:35
от Alofa
2 Ответов
336 Просмотров
Последний ответ Февраль 16, 2018, 19:43:03
от zergood