Форум
Написать нам
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: as-master  
Сбор текста по условию
EagleSHДата: Четверг, 02 Июля 2009, 00:08 | Сообщение # 1
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
Code
  string$='<gfgh><><><><><><>><>1234567<'
    a=POS(>,string$)+1
    a=a-1
    string$=StrDel(string$,1,a)
    a=POS(<,string$)+1
    If (a>2) Then
      a=a-2
      data$=data$+StrCopy(string$,1,a)
    Else
    End

подскажите что тут не правильно?

нужно собирать текст заключённый в >< в строке где куча этих самых ><
тоесть если находится запись >1234567< мы его забираем.

Добавлено (02 Июль 2009, 00:08)
---------------------------------------------

Code
string$='<gfgh><><><><><><>><>1234567<'
fulllen=LEN(string$)
For i=1 To fulllen
   a=POS(>,string$)+1
   a=a-1
   fulllen=fulllen-a
   string$=StrDel(string$,1,a)
   a=POS(<,string$)+1
   If (a>2) Then
     a=a-2
     data$=data$+StrCopy(string$,1,a)
   Else
   End
Next i

наваял, вроде фурычит как нужно:)

мож быстрее мона сделать?

Сообщение отредактировал EagleSH - Среда, 01 Июля 2009, 23:37
 
YURIYДата: Четверг, 02 Июля 2009, 14:09 | Сообщение # 2
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Может так?

Code
s$='<gfgh><><><><><><>><>1234567<'
For i=1 To LEN(s$)
    a=POS(>,s$)
    s$=StrDel(s$,1,a)
    a=POS(<,s$)-1
    If (a>0) Then
      d$=StrCopy(s$,1,a)
      Message("d$","")
    End
Next i

P. S. Цикла While, конечно, в MMB очень не хватает... :(



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 15:07 | Сообщение # 3
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, да тоже не плохо, единственное подскажи, если находит например 2-й подряд (3-й 4й и так далее) пробел (в твоём коде), чтоб его тупо не "забирать"

Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 15:09
 
YURIYДата: Четверг, 02 Июля 2009, 15:09 | Сообщение # 4
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (EagleSH)
если находит например 2-й подряд (3-й 4й и так далее) пробел

Не понял. Если будет ситуация вида "> <"?



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 15:14 | Сообщение # 5
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, да можно такое тоже предусмотреть, но если точнее, ситуация вида ">Text1_Text2__Text3___Text4<"
тоесть где более одного пробела, оставлять 1

_ - пробел

Добавлено (02 Июль 2009, 15:14)
---------------------------------------------
YURIY, оставлять один пробел...

или вот пример ситуации ">
DOC <"

на выходе должно быть "DOC"

Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 15:14
 
YURIYДата: Четверг, 02 Июля 2009, 15:14 | Сообщение # 6
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (EagleSH)
тоесть где более одного пробела, оставлять 1

StrChange разве кто-то отменил?



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 15:16 | Сообщение # 7
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
Quote (YURIY)
StrChange разве кто-то отменил?

нет, но надож считать жти пробелы? или я не прав?
 
YURIYДата: Четверг, 02 Июля 2009, 15:18 | Сообщение # 8
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Вы пробуйте, а не предполагайте!

Code
s$=StrChange(s$,  , )



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 15:30 | Сообщение # 9
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, буду пробывать, спс.

по ходу спрошу, есть ли возможность прервать отладочный режим? не раз сталкивался, когда отлаживал большие цыклы, приходилось задачей снимать ммб...

 
SowerДата: Четверг, 02 Июля 2009, 17:20 | Сообщение # 10
Ветеран форума
Группа: Проверенные
Сообщений: 916
Репутация: 11
Награды: 3
Статус: Offline
Quote (EagleSH)
не раз сталкивался, когда отлаживал большие цыклы, приходилось задачей снимать ммб...

Нажмите Esc
 
EagleSHДата: Четверг, 02 Июля 2009, 17:56 | Сообщение # 11
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
Grand, да нажимал, эффекта 0
YURIY, чёт не могу пробелы отловить, s$=StrChange(s$, , ) не работает.
 
YURIYДата: Четверг, 02 Июля 2009, 18:05 | Сообщение # 12
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (EagleSH)
Grand, да нажимал, эффекта 0

Цикл зацикливается, что ли? Что это за цикл такой, который вешает программу?

Quote (EagleSH)
YURIY, чёт не могу пробелы отловить, s$=StrChange(s$, , ) не работает.

Конкретнее, пожалуйста. Какой текст до и после?



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 20:00 | Сообщение # 13
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
Quote (YURIY)
Цикл зацикливается, что ли? Что это за цикл такой, который вешает программу?

обычный цикл :)
Quote (YURIY)
Конкретнее, пожалуйста. Какой текст до и после?

Code
  string$='                    DOC 5.0'
          string$=StrChange(string$,  , )

на выходе должно быть "DOC 5.0"

вобщем нужно если 1 пробел его оставить, если 2 сделать 1, и если больше или равно 3 - убрать вовсе :)

но давайте подправим пока этот пример,: куча пробелов подряд - убрать все (за основу нужно взять - если 2 и более пробела, убивать их).

Добавлено (02 Июль 2009, 20:00)
---------------------------------------------

Code
  fromstr$='  '
   tostr$=' '
   For i=1 To 50
     ReturnStr$=StrChange(data$,fromstr$,tostr$)
     data$=ReturnStr$
   Next i

сделал так - работает


Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 19:31
 
YURIYДата: Четверг, 02 Июля 2009, 20:39 | Сообщение # 14
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Code
string$='                    DOC 5.0'
r$='  '
string$=StrChange(string$,r$,'')

Добавлено (02 Июль 2009, 20:36)
---------------------------------------------
Блин, опоздал.

К чёрту цикл!

Добавлено (02 Июль 2009, 20:39)
---------------------------------------------

Quote (EagleSH)
обычный цикл :)

в студию этот "обычный" цикл :)



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 22:12 | Сообщение # 15
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
Quote (YURIY)
в студию этот "обычный" цикл

Code
  For i=1 To 17000
     a=POS(>,string$)
     fulllen=fulllen-a
     string$=StrDel(string$,1,a)
     a=POS(<,string$)-1
     If (a>0) Then
       coma$=StrCopy(string$,1,a)
       If (ORD(coma$)=10) Then
         b=a-1
         coma$=StrCopy(string$,2,b)
       Else
       End
       If (ORD(coma$)>31 & ORD(coma$)<192) Then
         data$=data$+coma$+','
       Else
       End
       **  Message("data$","")
     End
   Next i

вот по esc не останавливает :)

 
YURIYДата: Четверг, 02 Июля 2009, 22:14 | Сообщение # 16
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
"Обычный" цикл на 17 тысяч итераций.

Это шутка? Зачем столько?

Могу сразу сказать, что это абсолютно неправильный подход к алгоритмизации.



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 22:30 | Сообщение # 17
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
Quote (YURIY)
Могу сразу сказать, что это абсолютно неправильный подход к алгоритмизации.

ну правильный не правильный тут делать нечего, ибо данных мне столько нужно обработать + 17000 это максимум, с каждым проходом эти 17000 уменьшаются фактически в геометрической прогрессии (если грубо) :)
длина файла просто 17кб примерно, сколько это байт? :) правильно - в 1024 раза больше.
да и в работе программа моя быстро работает, меня устраивает.... а вот в дебаге конечно нет.

а что есть альтернатива для 17000 к примеру операций? ;)

Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 22:32
 
YURIYДата: Четверг, 02 Июля 2009, 22:35 | Сообщение # 18
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
И ещё раз. Могу сказать, что это неправильный подход. Спросите у любого программиста - приходилось ли когда-то ему писать цикл хотя бы до 1000 итераций? Ответ будет - "что это за 'алгоритм' такой, который требует данный подход?".

Что за задача стоит? Спорим, сделаю проще? :)

Скрипт должен быть универсальным лучше всего, а не тупо заточен под ситуацию. Потому и такой подход получается...



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 22:40 | Сообщение # 19
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, зачем спорить? если сделаете - буду благодарен... учиться всегда можно :)

а задача простая, есть файл в котором куча ерунды из которой нужно отловить нужный текст по условиям выше, а текст этот разместить через ",":) (в идеале конечно создать таблицу, но это пока не главное)

Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 22:41
 
YURIYДата: Четверг, 02 Июля 2009, 22:42 | Сообщение # 20
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Но цикл здесь зачем?


Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 22:46 | Сообщение # 21
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, ну в моём случае я беру длину файла за длину цикла (который кстати уменьшается не на единицу каждый проход, а на десятки)
и ищу этот текст между "><" и собираю в тестовик.

тупо проще можно сделать? интересно узнать как :)

Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 22:46
 
YURIYДата: Четверг, 02 Июля 2009, 22:52 | Сообщение # 22
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Вот так получить содержимое файла в переменную:

Code
s$=StrFromFile(файл.txt,0,-1)

и выдрать все слова скриптом из второго сообщения данной темы.



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 22:56 | Сообщение # 23
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
Quote (YURIY)
и выдрать все слова скриптом из второго сообщения данной темы.

так именно так я и делаю :)

Code
For i=1 To LEN(s$)

при длине файла 17кб какая длина цикла? :)

Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 22:57
 
YURIYДата: Четверг, 02 Июля 2009, 22:59 | Сообщение # 24
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (EagleSH)
при длине файла 17кб какая длина цикла? :)

Никакая. Мы говорим об оптимизации? Если она вам нужна, читайте ещё раз и пробуйте:

Quote (YURIY)
Вот так получить содержимое файла в переменную:

Если не нужна - продолжайте использовать цикл scratch

Если нужно выдрать слова из файла - описанного выше метода хватает с головой!



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 23:03 | Сообщение # 25
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, вот мой финальный код (доработал на вашем примере, кстати мой изначальный почти такойже как и ваш :) )
Code
  fulllen=LEN(string$)
    For i=1 To fulllen
      a=POS(>,string$)
      fulllen=fulllen-a
      string$=StrDel(string$,1,a)
      a=POS(<,string$)-1
      If (a>0) Then
        coma$=StrCopy(string$,1,a)
        If (ORD(coma$)=10) Then
          b=a-1
          coma$=StrCopy(string$,2,b)
        Else
        End
        If (ORD(coma$)>31 & ORD(coma$)<192) Then
          data$=data$+coma$+','
        Else
        End
      End
    Next i

fulllen как раз длина файла, она же - длина цикла и данные читаю сразу в переменную (string$ как раз содержит все 17кб), опять вернулись к большому циклу, не так ли? :)

Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 23:05
 
YURIYДата: Четверг, 02 Июля 2009, 23:07 | Сообщение # 26
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
А, вон оно что.

Есть идея.

Дайте-ка мне тот файл. Прикрепите к сообщению.



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 23:11 | Сообщение # 27
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, вот

п.с. авторизируйте, если можно в асе.

Прикрепления: temp.txt (14.6 Kb)
 
YURIYДата: Четверг, 02 Июля 2009, 23:25 | Сообщение # 28
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
А, ну да, всё тогда правильно.

А отладка при таком большом цикле у меня не подвисает - она же должна как и положено показать нам все изменения в переменных, потому и так долго. Короче говоря, мне снимать приложение в диспетчере задач не пришлось.

Quote (EagleSH)
опять вернулись к большому циклу, не так ли?

Да, только я имел ввиду несколько другое :) Одно дело вы указали сами 17000, но так не делается. Нужно универсально скрипты писать под такие задачи. Файл-то наверняка и меняться будет?

И самое главное, сам скрипт работает быстро. Для 15 КБ это ещё не проверка быстродействия :)

А для отладки нужно оставить в файле 1-2 строки и тогда проверять. Тогда и не придётся зря мучаться, ждать и убивать процесс.

Добавлено (02 Июль 2009, 23:25)
---------------------------------------------

Quote (EagleSH)
п.с. авторизируйте, если можно в асе.

Цель и номер - плиз в ЛС. У меня жёсткий антиспам стоит.



Вечная память Андрею Сергееву!
 
EagleSHДата: Четверг, 02 Июля 2009, 23:30 | Сообщение # 29
Поднаторевший
Группа: Проверенные
Сообщений: 106
Репутация: 0
Награды: 0
Статус: Offline
YURIY, странно, чёж у меня отладка подвисает... вроде на 4.9.7 всё как надо работало, а на 4.9.8 шото не то, да и crc на модули они прикрутили, раньше иожно было под себя настроить и при компиляции было то что тебе нужно, а теперь фига.
Quote (YURIY)
Нужно универсально скрипты писать под такие задачи. Файл-то наверняка и меняться будет?

дык и так универсально какбы, там длина понятно что менятся, так и в коде оно всё как надо :)
 
YURIYДата: Четверг, 02 Июля 2009, 23:32 | Сообщение # 30
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
Quote (EagleSH)
а на 4.9.8 шото не то, да и crc на модули они прикрутили, раньше иожно было под себя настроить и при компиляции было то что тебе нужно, а теперь фига.

Что там за проблемы?

Quote (EagleSH)
дык и так универсально какбы

Если будет стоять вот такая кака:

For i=1 To 17000

это не универсальность :) А вот LEN(s$) - уже другой разговор!



Вечная память Андрею Сергееву!
 
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: