0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
|
1 | |
Работа со строкой в Delphi 702.10.2014, 15:06. Показов 2423. Ответов 37
Метки нет (Все метки)
Здравствуйте уважаемые форумчане!
У меня возник вопрос, собственно есть строка - /peripheral/tim: 1: 0 2: 0 3: 0 4: 3795 5: 3782 6: 7127 В строке за место нулей может быть 3-4 значное число. Так вот как бы мне сделать так что бы: 1) Была проверка что это нужная мне строка, так как строка может быть и другая 2) Как заполнить двумерный массив, где значение первого столбца будет однозначным, цифра перед : например 3:, а значение второго столбца будет число после :, например : 3425 Пример: 1: 325 2: 7121 3: 0 4: 3795 5: 3782 6: 7127 1 325 2 7121 3 0 4 3795 5 3782 6 7127
0
|
02.10.2014, 15:06 | |
Ответы с готовыми решениями:
37
Работа с файлами, чтение/работа со строкой Работа со строкой Работа со строкой Работа о строкой |
02.10.2014, 15:36 | 2 |
1) Ответить на вопрос, что в этой строке уникального.
Например /peripheral/tim это уникальная часть строки, которая отличает ее 100% от других, то можно поставить проверку типа if pos("/peripheral/tim")<>-1 then... 2) Тут алгоритм может быть следующий 2.1 сплиттим строку через пробел http://stackoverflow.com/quest... -delimiter 2.2 пробегаем по полученному массиву, если индекс начинается с 1, то в нечетных элементах будет номер с пробелом (1:,2:,3: ...), в четных элементах массива будут числа ( 325, 7121,0...) 2.2.1. При выборе нечетных элементов делаем StringReplace http://www.delphibasics.ru/StringReplace.php , убираем двоеточие, записываем в двумерный массив. При выборе четных элементов записываем без преобразований. Как то так
1
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
|
02.10.2014, 16:49 [ТС] | 3 |
Да, уникальная
Что то не получается... Можете разжевать поподробнее. Вот задача - из COM порта я получаю строку с параметрами, строка хранится в глобальной переменной resData, так вот строки могут быть любыми, но мне нужна которая начинается на /peripheral/tim, и из нее нужно выдрать значения. Причем параметры эти постоянно меняются и меняются очень быстро. Добавлено через 23 минуты Строка находится в переменной resData как мне правильно написать условие?
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
||||||
02.10.2014, 17:50 [ТС] | 5 | |||||
Вот мой текст
Добавлено через 23 минуты С этим разобрался) Добавлено через 7 минут Пожалуйста, можно поподробнее, желательно с примером)
0
|
02.10.2014, 18:05 | 6 | |||||
infoehra, т.е. вы дошли до того, что в resData теперь хранится строка /peripheral/tim: 1: 0 2: 0 3: 0 4: 3795 5: 3782 6: 7127 так?
Теперь надо заменить код ShowMessage('OK'); на алгоритм, который я привел. Ок..
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
||||||
02.10.2014, 18:11 [ТС] | 7 | |||||
Нет, в resData храниться то что прилетает с контроллера в COM порт.
Но если я нажимаю на кнопку и в это время там оказывается строка с началом /peripheral/tim, то вылетает сообщение.... Но почему то если после того как вылетело сообщение в COM порт приходит другая строка, то сообщение все равно вылетает, такое ощущение что где то это запоминается и значение Pos не обновляется, хотя resData меняет свои значения (вижу это в Memo1)
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
||||||
02.10.2014, 18:29 [ТС] | 9 | |||||
Вот процедура чтения из COM порта
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
|||||||||||
02.10.2014, 18:33 [ТС] | 11 | ||||||||||
Не очень понял о чем Вы...
0
|
02.10.2014, 18:36 | 12 |
infoehra, у вас написано resData:=resData+(PChar(DataPtr)[i]);
По идее если resData глобальный объект, то он постоянно должен добавляться. Нет очищения. resData = ''; i :=0; resData = ''; For i:=0 to (DataSize-1) do begin resData:=resData+(PChar(DataPtr)[i]); //+'*'+IntToStr(i)+'*' end; Вот так должно работать
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
|
02.10.2014, 18:48 [ТС] | 13 |
РАБОТАЕТ!!! Еще один вопрос решили))) Спасибо огромное!!!
Добавлено через 6 минут Написал, а что делать дальше??? Как можно посмотреть массив? Мне нужно значение после '3:' привязать к ScrollBar.Position
0
|
02.10.2014, 18:52 | 14 |
infoehra, почитайте про TStringList. Потом создайте из одномерного массива двумерный. Потом найдите в двумерном массиве 3, вытащите значение и привяжите к ScrollBar.Position.
1. Создать из одномерного StringList двумерный array. Как сделаете, напишите
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
|
02.10.2014, 21:51 [ТС] | 15 |
Как из одномерного двумерный создать я представляю, а вот как заполнить его так как мне надо вот с этим проблема. Может поможете)
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
|
02.10.2014, 22:54 [ТС] | 17 |
ок, будем разбираться)
0
|
0 / 0 / 0
Регистрация: 02.10.2014
Сообщений: 27
|
|
02.10.2014, 22:59 [ТС] | 19 |
0
|
02.10.2014, 23:03 | 20 | |||||
infoehra, вам надо пройти по StringList и забить двумерный массив.
Т.е. for надо делать по StringList. Как-то так: Начинать надо с 1, так как в 0-вом элементе у вас будет содержаться /peripheral/tim:
0
|
02.10.2014, 23:03 | |
02.10.2014, 23:03 | |
Помогаю со студенческими работами здесь
20
Работа со строкой Работа со строкой Работа со строкой Работа со строкой. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |