Форум » GUI » Перебор многострочной переменной » Ответить

Перебор многострочной переменной

SkyNET: Здравствуйте ! Решил я сделать простенькую программу с получением куска текста с сайта. Подкорректировал пример. Мне требуется выделить тэг из переменной с HTML страницы Сделал функцию: Function TextRat(cString,cStart,cEnd) Local cText cText:=SUBSTR(cString,RAt(cStart,cString),RAt(cEnd,cString)) Return cText Но он не работает, т.к cString передаётся многострочное поле. Как сделать перебор строк ?

Ответов - 3

gfilatov: SkyNET пишет: Как сделать перебор строк ? Попробуй так: For i := 1 TO MLCount ( cText ) Line := AllTrim ( MemoLine ( cText , , i ) ) cRet := TextRat(Line,cStart,cEnd) Next i

SkyNET: Блин, это я неправильную фунцию написал... Вот корректная, всё прекрасно работает: // Функция возвращает текст между двумя другими // очень удобно, например для поиска Тэгов в HTML // ************* // Пример: // cString:="<title>Hello World !</title>" // cText:=SelectText(cString,"<title>","</title>") // // Results: "Hello World !" Function SelectText(cString,cStart,cEnd) Local cText, nStart:=LEN(cStart), nEnd:=LEN(cEnd) Local cRatStart,cRatEnd // Ищем начальный текст и вырезаем сам начальный текст cRatStart:= RAt(cStart,cString)+nStart // Тут этого делать не нужно, т.к Rat выделит начальный символ текста cRatEnd := RAt(cEnd,cString) // теперь выделяем текст, между двумя границами cText:=MySUBSTR(cString,cRatStart,cRatEnd) Return cText // СИНТАКСИС: cString - текст, nStart - первый символ, nEnd - последний символ fUNCTION MySUBSTR(cString,nStart,nEnd) Local cReturn, nString:=LEN(cString) cReturn := SUBSTR(cString,nStart,nEnd-nStart) Return cReturn

SkyNET: Большое вам спасибо !!! Теперь моя функция ищет и тэги на несколько строк ! Вот листинг: // Функция возвращает текст между двумя другими // очень удобно, например для поиска Тэгов в HTML // ************* // Пример: // cString:="<title>Hello World !</title>" // cText:=SelectText(cString,"<title>","</title>") // // Results: "Hello World !" // ********************************************** // Передаю спасибо Григорию Филатову за помощь // с написанием этой функции // *********************************************** Function SelectText(cString,cStart,cEnd,nRepeats) Local cText, nStart:=LEN(cStart), nEnd:=LEN(cEnd) Local cRatStart,cRatEnd, nI,nI2, cLine:="", cCurLine Local nCurRepeat:=0, cSelText:="",nLine,nEndLine nRepeats:=IIF(nRepeats==NIL,1,nRepeats) For nI:=1 TO MLCount(cString) cCurLine:= MemoLine(cString,,nI) // Ищем начало строки IF Rat(cStart,cCurLine)>0 // увеличиваем количество повторов nCurRepeat:=nCurRepeat+1 // если повтор последний IF nCurRepeat==nRepeats // присваем начальную строчку nLine:=nI ENDIF ENDIF // Ищем конец строки IF Rat(cEnd,cCurLine)>0 // если повтор последний IF nCurRepeat==nRepeats // присваем конечную строчку nEndLine:=nI ENDIF ENDIF Next // Задаём несколько строчек For nI2:=nLine to nEndLine cLine:=cLine+MEMOLINE(cString,,nI2)+chr(10)+chr(13) Next //MsgInfo(cLine) // Ищем начальный текст и вырезаем сам начальный текст cRatStart:= RAt(cStart,cLine)+nStart // Тут этого делать не нужно, т.к Rat выделит начальный символ текста cRatEnd := RAt(cEnd,cLine) // теперь выделяем текст, между двумя границами cText:=MySUBSTR(cLine,cRatStart,cRatEnd) Return cText // СИНТАКСИС: cString - текст, nStart - первый символ, nEnd - последний символ fUNCTION MySUBSTR(cString,nStart,nEnd) Local cReturn, nString:=LEN(cString) cReturn := SUBSTR(cString,nStart,nEnd-nStart) Return cReturn




полная версия страницы