PDA

Просмотр полной версии : Длинные строки (STRING)



rumkin
19.04.2013, 05:28
Добрый день, уважаемые форумчане! Подскажите как реализовать объединение двух строк в Codesys, одна из входных и результирующая строки могут быть длинее 255 символов.

capzap
19.04.2013, 06:57
во первых, а зачем такая длинна? Во вторых строка легко может быть превращена в массив байт, а он может быть и больше 255

rumkin
19.04.2013, 07:06
строка легко может быть превращена в массив байт, а он может быть и больше 255[/QUOTE]
Можете написать пример?

capzap
19.04.2013, 07:09
смотрите примеры по смскам или вебсерверу, там это часто используется. Я на телефоне не напишу пример

rumkin
19.04.2013, 07:14
смотрите примеры по смскам или вебсерверу, там это часто используется.
Спасибо за наводку, поищу. Как будете с компа сможете написать прмер? на всякий случай)

Yegor
19.04.2013, 07:15
И всё-таки зачем и откуда в ПЛК строка длиннее 255 символов?


строка легко может быть превращена в массив байт, а он может быть и больше 255Нет необходимости. Строка — уже массив. И она может быть сколь угодно длинной.


VAR
s1: STRING;
s2: STRING(480);
s3: STRING(560);
tail, caret: POINTER TO BYTE;
END_VAR

tail := ADR(s1);
caret := ADR(s3);

WHILE tail^ <> 0 DO
caret^ := tail^;
tail := tail + 1;
caret := caret + 1;
END_WHILE

tail := ADR(s2);

WHILE tail^ <> 0 DO
caret^ := tail^;
tail := tail + 1;
caret := caret + 1;
END_WHILE

Yegor
19.04.2013, 14:47
Более безопасно и пофиг длина
s3 := s1;
Компилятор учтет и LEN и SIZEOF обеих переменныхЧот я туплю ваще. Воспитался на сях, и даже теперь в голове мысли не возникает строки по-нормальному соединять. А в своём примере специально показал, что строка-результат должна быть не меньше суммы её слагаемых.
2. Ищем длину str1
3. Копируем в хвост str1 строку str3 пока нет 0 и не вышли за sizeof(str1)-1Лишний проход при выяснении длины. Но можно пренебречь, да.

Yegor
19.04.2013, 19:44
Ну так объявление STRING(..) - это указание на предельный размерРазмер по умолчанию — 80 символов ;) Предел там 2М где-то.

ВладОвен
16.05.2022, 13:16
Привет.
Подскажите, а как подсчитать действительную длину длинной строки? Т.е., к примеру, я объявил длину строки 512 символов, но реальная длина - 400..420 символов. Но как узнать, реальную точную длину?
Функция LEN() работает до 255 символов.
Функция SIZEOF() показывает длину строки при инициализации.
Неужели только в цикле искать первый символ с кодом 0 (как в примере выше)?

Вот:
60682

Евгений Кислов
16.05.2022, 13:45
Привет.
Подскажите, а как подсчитать действительную длину длинной строки? Т.е., к примеру, я объявил длину строки 512 символов, но реальная длина - 400..420 символов. Но как узнать, что реальную точную длину?
Функция LEN() работает до 255 символов.
Функция SIZEOF() показывает длину строки при инициализации.
Неужели только в цикле искать первый символ с кодом 0 (как в примере выше)?

Вот:
60682

Для работы с длинными строками используется библиотека StringUtils.
В ней есть функции StrLenA (для STRING) и StrLenW (для WSTRING).

Обратите внимание - вы задали вопрос не в том разделе (ПЛК1хх программируются в CoDeSys V2.3, а не V3.5).