Сбор текста по условию
|
|
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
| Вы пробуйте, а не предполагайте!
Вечная память Андрею Сергееву!
|
|
| |
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) и выдрать все слова скриптом из второго сообщения данной темы. так именно так я и делаю при длине файла 17кб какая длина цикла?
Сообщение отредактировал EagleSH - Четверг, 02 Июля 2009, 22:57 |
|
| |
YURIY | Дата: Четверг, 02 Июля 2009, 22:59 | Сообщение # 24 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (EagleSH) при длине файла 17кб какая длина цикла? :) Никакая. Мы говорим об оптимизации? Если она вам нужна, читайте ещё раз и пробуйте: Quote (YURIY) Вот так получить содержимое файла в переменную: Если не нужна - продолжайте использовать цикл Если нужно выдрать слова из файла - описанного выше метода хватает с головой!
Вечная память Андрею Сергееву!
|
|
| |
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, вот п.с. авторизируйте, если можно в асе.
|
|
| |
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$) - уже другой разговор!
Вечная память Андрею Сергееву!
|
|
| |