Имею следующий код:
Код: Выделить всё
IF FIND('OTVET[j]','$N') > 0 THEN
IF LEN(OTVET[j])>=254 THEN
j:=j+1;
ELSE
j:=0;
END_IF
END_IF
Перенос в общем не работает, где я ошибся?
Код: Выделить всё
IF FIND('OTVET[j]','$N') > 0 THEN
IF LEN(OTVET[j])>=254 THEN
j:=j+1;
ELSE
j:=0;
END_IF
END_IF
Потому что в строке содержится именно $N. И этот символ встречается в массиве часто, но почему-то FIND не работает.
Получается должно быть так?
Код: Выделить всё
IF FIND('OTVET[j]','$N') > 0 OR LEN(OTVET[j])>=254 THEN
j:=j+1;
ELSE
j:=0;
END_IF
END_IF
На этом форуме вопросы можно задавать только «при наличии должной квалификации»? Если «Да», то вопрос можно считать закрытым.
?
Возможно как частный случай ограничения области поиска...
OTVET: ARRAY [0..16] OF STRING(255);
Есть буфер, конечная длина которого мне пока что не известна. Это связано с тем, что когда буфер разбивается на массив, периодически происходит перезапись одной строки несколько раз.
Без этого, пишется только в OTVET[0], затираясь и перезаписываясь когда достигается 255 символов.
j:=0; тут у меня подразумевалось что будет массив вида OTVET[j,k] потому что буфера приходят два с разницей в 30 минут.
Да, длина определенна, ведь счетчик энергии на сколько я знаю при каждом опросе не может отдать то одни значения, то другие. Меняются только показания. В ответе содержатся $R$N из документации понятно что это разделитель между кодами показаний.
Ну да, простое условие, если данных много, переносим на следующую строку, если помещаются - то не переносим. Я просил помочь разобраться почему при переносе, у меня случается проблема описанная выше, в последнем абзаце.
где у вас в коде перенос-то? )))))
Хорошо. Название книги дадите где это прочитать можно?
Код: Выделить всё
IF FIND('OTVET[j]','$N') > 0 THEN //
IF LEN(OTVET[j])>=254 THEN
j:=j+1;
ELSE
j:=0;
END_IF
END_IF
1)Я когда писал, ориентировался на то, что как только первый раз встречается $N сразу переносим на новую строку, до проверки длины самой строки. И только сейчас, благодаря Вам я заметил ошибку у себя, что если найден $N то нужно перенести, а у меня перед переносом проверка на длину, а после символа $N длина OBIS кода не может быть 255 символов, она гораздо короче.Linkel писал(а): ↑23 янв 2020, 18:311)FIND('OTVET[j]','$N') > 0 так и должно быть, или оно эквивалентно == true? я просто на С+# привык)Код: Выделить всё
IF FIND('OTVET[j]','$N') > 0 THEN // IF LEN(OTVET[j])>=254 THEN j:=j+1; ELSE j:=0; END_IF END_IF
2)ваш j заходит хоть в код, который перебирает индексы, или он не знает об изменение?
3)что будет если условие IF FIND('OTVET[j]','$N') > 0 будет ложно? есть else для него?в любом OTVET[j] есть хоть одна SN? т.е если в массиве OTVET[0/1/2] не будет знака SN, ваш блок j:=j+1; просто не выполнится и j=0, дальше остальные индексы мы не перебираем?
lol: все сложно, ладно, если разобрались, рад за вас.