![]() |
|
#1
|
|||
|
|||
![]() GetInfo - операция связанная с получением информации.
Результат (z):string; --------- Код:
For i:=0 to memo1.lines.count-1 do begin if pos('Value1',memo1.Lines.ValueFromIndex[i])>0 then begin memo2.Lines.Insert(i,GetInfo(z)); if pos ('Multi',memo2.Lines.ValueFromIndex[i])>0 then memo3.Lines.Insert(i,'Mnogo') else if pos('Mono',memo2.Lines.ValueFromIndex[i])>0 then memo3.Lines.Insert(i,'Malo') else memo3.Lines.Insert(i,'Error') end; Таких скриптов 4, одни друг за другом, т.к. Value - 4 шт. Т.е. достаточно скопировать этот код 4 раза, проставить значения для Value от 1 до 4. Этот цикл не работает ![]() В memo1 сидит текст (z), о нем GetInfo получает данные, которые и пишет в "буфер" memo2. Memo1 - содержит данные Memo2 - типа буфера Memo3 - вывод результата На форме выглядит как ------------------ | M | M | | E | E | | M | M | | O | O | | 1 | 3 | ------------------ Memo2 от глаз юзера скрыт, т.к. в нем проводятся все операции. |
#2
|
|||
|
|||
![]() Вот это не то?
Код:
var i: Integer; Buffer: String; begin for i := 0 to Memo1.Lines.Count - 1 do if Pos('Value1', Memo1.Lines.Strings[i]) > 0 then begin Buffer := GetInfo(z); if Pos('Multi', Buffer) > 0 then Memo3.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo3.Lines.Add('Malo') else Memo3.Lines.Add('Error') end; |
#3
|
|||
|
|||
![]() Это упростило код, но проблемы не решило.
Дело в том, что весь цикл выглядит так Код:
for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Value1', Memo1.Lines.Strings[i]) > 0 then begin Buffer := GetInfo(z); if Pos('Multi', Buffer) > 0 then Memo3.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo3.Lines.Add('Malo') else Memo3.Lines.Add('Error') end; if Pos('Value2', Memo1.Lines.Strings[i]) > 0 then begin Buffer := GetInfo(z); if Pos('Multi', Buffer) > 0 then Memo3.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo3.Lines.Add('Malo') else Memo3.Lines.Add('Error') end; if Pos('Value3', Memo1.Lines.Strings[i]) > 0 then begin Buffer := GetInfo(z); if Pos('Multi', Buffer) > 0 then Memo3.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo3.Lines.Add('Malo') else Memo3.Lines.Add('Error') end; if Pos('Value4', Memo1.Lines.Strings[i]) > 0 then begin Buffer := GetInfo(z); if Pos('Multi', Buffer) > 0 then Memo3.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo3.Lines.Add('Malo') else Memo3.Lines.Add('Error') end; end; Как должен работать цикл. Из Memo1 от начала и до конца, по очереди берется содержимое строки (z). Потом еще один цикл проверяет содержит ли эта взятая строка Value1 или Value2 или Value3 или Value4. Когда становится понятно, какое Value содержится, то соответственно выбирается еще один цикл написанные именно под найденное Value, в нем мы передаем при помощи команды получаем значение Z. И снова цикл, чтобы определить, содержит ли Z Multi или Mono. Если содержит то в Memo3 выводим результат или Mnogo или Malo. Если не содержит то в Memo3 выводим Error. Что на деле. Циклы начинают работать. Работают. Но со 2-й или 3-ей строки Memo3 начинается полная пурга. Ввиде одних лишь Mnogo. И редко редко проскакивают Malo. Как мне думается. Что-то не ладное творится в переменной Buffer. Или она не очищается или чего-то еще. Но записывая 1 раз Multi в ней то потом прога так и считает что там каждый раз Multi. Хотя GetInfo(z) каждый раз туда пишет верные данные. Но то ли в Buffer дописывается что результат в конце, а цикл находит первое попавшееся. Последний раз редактировалось FreeUser, 05.09.2008 в 14:30. |
#4
|
|||
|
|||
![]() Ну помогите пожалуйста кто может
|
#5
|
|||
|
|||
![]() Ну первое, вроде ошибок нет, и Buffer обнулять не обязательно, ИМХО трабла в функции GetInfo
А второе Что такое z?))) это не Memo1.Lines.Strings[i]??? Если да то код можно упростить |
#6
|
|||
|
|||
![]() Да. Z это именно Memo1.Lines.Strings[i]. Точно так.
|
#7
|
|||
|
|||
![]() А может ли быть проблема, что GetInfo(z) возвращает огромный кусок текста? Т.е. около 500 символов.
|
#8
|
|||
|
|||
![]() Вот так сократить код можно
Код:
var i, Index: Integer; Buffer, strRead: String; begin for i := 0 to Memo1.Lines.Count - 1 do begin strRead := Memo1.Lines.Strings[i]; Buffer := ''; for Index := 1 to 4 do if Pos('Value'+IntToStr(Index), strRead) > 0 then begin Buffer := GetInfo(strRead); if Pos('Multi', Buffer) > 0 then Memo2.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo2.Lines.Add('Malo') else Memo2.Lines.Add('Error'); Break; end; end; Не марел, но работать вроде должен, если не поможет то ошибка в GetInfo, так что выкладывай код |
#9
|
|||
|
|||
![]() Код:
var i, Index: Integer; Buffer, strRead: String; begin for i := 0 to Memo1.Lines.Count - 1 do begin strRead := Memo1.Lines.Strings[i]; Buffer := ''; for Index := 1 to 4 do if Pos('Value'+IntToStr(Index), strRead) > 0 then begin Buffer := GetInfo(strRead); if Pos('Multi', Buffer) > 0 then Memo2.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo2.Lines.Add('Malo') else Memo2.Lines.Add('Error'); Break; end; end; Не понял...А как же это Value? У меня там 4 разных Value. А тут 4 раза 1 Value |
#10
|
|||
|
|||
![]() Например value1 это XX, а value2 это 123, value3 z1x. Не подходит
Последний раз редактировалось FreeUser, 06.09.2008 в 16:53. |
#11
|
|||
|
|||
![]() АААА тогда делай так)
Код:
const Value: array [0..3] of String = ('Value1', 'Value2', 'Value3', 'Value4'); var i, j: Integer; Buffer, strRead: String; begin for i := 0 to Memo1.Lines.Count - 1 do begin strRead := Memo1.Lines.Strings[i]; Buffer := ''; for j := 0 to Length(Value) - 1 do if Pos(Value[j], strRead) > 0 then begin Buffer := GetInfo(strRead); if Pos('Multi', Buffer) > 0 then Memo2.Lines.Add('Mnogo') else if Pos('Mono', Buffer) > 0 then Memo2.Lines.Add('Malo') else Memo2.Lines.Add('Error'); Break; end; end; |
#12
|
|||
|
|||
![]() Блин) И этот цикл не подходит ) Т.к. Multi и Mono тоже разные каждый из 4 циклов. Но GetInfo(Z) не может быть не правильной. Это гарантия.
|
#13
|
|||
|
|||
![]() ))))) мда, но вот то что я тебе привел работает, значит либо ошибка в процедуре GetInfo либо выше и ниже этого кода
|