![]() |
![]() |
|
Подскажите алгоритм обработки больших строк. | ☑ | ||
---|---|---|---|---|
0
mzelensky
09.08.11
✎
10:51
|
Доброго всем!
Ситуация сперва кажется простой, но что-то красиво пока сделать не получается. Имеется ГПС приемник, который шлет данные на прямую в ком-порт. Нашел уже готовую библиотеку, которая позволяет подключать этот ком-порт и получать с него данные. Инфа приходит в строковом типе в формате NMEA: wiki:NMEA Проблема в том ,что приходящие Данные не обновляются, а постоянно дополняются, т.е. пример : 1 итерация - строка: $GPRMC,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh $GPGSV,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh GPGGA,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh 2 итерация - строка Строка из 1 итарации + новые данные с ГПС $GPRMC,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh $GPGSV,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh GPGGA,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh 3 итерация - строка Строка из 2 итарации + новые данные с ГПС $GPRMC,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh $GPGSV,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh GPGGA,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh и т.д. Из всего этого хлама мне нужна вот эта строка: $GPRMC,hhmmss.ss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh и прабла в том ,как быстро и красиво выбрать именно эту строку с последними данными, т.е. взять первую снизу?!?!?! |
|||
1
mzelensky
09.08.11
✎
10:52
|
Данные получаю обработчиком:
Процедура ВнешнееСобытие(Источник, Событие, Данные) Сообщить("Получено значение: " + Данные); КонецПроцедуры |
|||
2
IKSparrow
09.08.11
✎
10:53
|
В Объект "Текст" выгружай строку и оперируй его методами.
|
|||
3
Wobland
09.08.11
✎
10:53
|
стр.ПолучитьСтроку(стр.КоличествоСтрок()) - как-то так, если у тебя там Символы.ПС разделитель
|
|||
4
mzelensky
09.08.11
✎
10:53
|
(0) + таким образом длина строки "Данные" постоянно увеличивается...и буквально через пару минут уже может достигать несколько тысяч строк.
|
|||
5
Fragster
гуру
09.08.11
✎
10:54
|
теоретически ты должен получать только последнюю точку
|
|||
6
mzelensky
09.08.11
✎
10:54
|
(2) данные получаются каждую секунду. Сколько займут эти выгрузки/загрузки/обработки
|
|||
7
mzelensky
09.08.11
✎
10:55
|
(5) не получает он последнюю строчку. Я тоже сперва думал ,что будут приходить ток НОВЫЕ данные, а нифига - приходят ВСЕ предыдущие + НОВЫЕ!
|
|||
8
Fragster
гуру
09.08.11
✎
10:55
|
(7) ищи другую ВК
|
|||
9
mzelensky
09.08.11
✎
10:55
|
(3) так строка то НЕ ПОСЛЕДНЯЯ!
|
|||
10
mzelensky
09.08.11
✎
10:56
|
(8) можешь предложить?!
|
|||
11
Fragster
гуру
09.08.11
✎
10:57
|
(10) ты еще не сказал, какую предлагать не надо
|
|||
12
mzelensky
09.08.11
✎
10:57
|
||||
13
Fragster
гуру
09.08.11
✎
11:00
|
||||
14
H A D G E H O G s
09.08.11
✎
11:00
|
(13) Это не ВК.
Это устройство тупое, хранит и шлет все, что накопилось |
|||
15
H A D G E H O G s
09.08.11
✎
11:01
|
(13) Посмотри на исходники ВК - примитив через WinAPI ReadFile()
|
|||
16
mzelensky
09.08.11
✎
11:01
|
(13) уже скачал - сейчас буду пробовать.
|
|||
17
mzelensky
09.08.11
✎
11:01
|
(15) может ты чего лучше предложишь?!
|
|||
18
Fragster
гуру
09.08.11
✎
11:01
|
(14) странное устройство, через нмеа весь трек слать
|
|||
19
Fragster
гуру
09.08.11
✎
11:02
|
хотя может в настройках что
|
|||
20
H A D G E H O G s
09.08.11
✎
11:02
|
(13) Ему, устройству через ВК
COMПорт.ЗаписатьСтроку(Команда); надо сказать, чтобы обнулилось после чтения. |
|||
21
H A D G E H O G s
09.08.11
✎
11:02
|
(20) +
или в настройках |
|||
22
H A D G E H O G s
09.08.11
✎
11:03
|
(18) Или автор где то
** Доктор Хаус |
|||
23
mzelensky
09.08.11
✎
11:07
|
(21) настроек как таковых просто НЕТ...с устройством идет ток диск, который подрубает эмулятор (т.к. устройство подключается через USB) + тестовая прога, которая так же только проверяет конект к спутникам.
Устройство нормально работает на специализированных программах с картами (типа навитела или Ози). Но мне нужно использовать ГПС данные напрямую в 1С-ке...а тут вот такая прабла |
|||
24
mzelensky
09.08.11
✎
11:08
|
я уже думал не постоянно получать данные...сплошным потоком, а брать единовременные данные. Т.е. подключил порт, считал первые полученные данные и закрыл его. Таким образом получается не весь трек, а ток единичные координаты. Но это как-то через задницу :(
|
|||
25
H A D G E H O G s
09.08.11
✎
11:12
|
(24)
Строки фикс длины. 1) Сохраняем в файл 2) Открываем через FSO 3) Читаем x байт с конца |
|||
26
mzelensky
09.08.11
✎
11:13
|
Кажется нашел! В той ВК есть тест (прожка на делфяке) и в функции РИД прописано:
for i:=1 to rd_cnt do begin ReadBuffer:=ReadBuffer+Buff[i]; end; думаю это и есть сохранение трека! |
|||
27
mzelensky
09.08.11
✎
11:14
|
(26) + т.к. потом именно эта переменная и возвращается
if p>0 then begin Result:=Copy(ReadBuffer,1,p-1); Delete(ReadBuffer, 1, p+1); end else begin Result:=''; end; Осталось ток затереть "плюсование" |
|||
28
mzelensky
09.08.11
✎
11:15
|
(25) Строки НЕ фиксированной длины!
|
|||
29
H A D G E H O G s
09.08.11
✎
11:17
|
(27) Она глобальная и не обнуляется в начале функции.
Что поделать - криворукость. Я пропустил :-( |
|||
30
mzelensky
09.08.11
✎
11:20
|
(29) слушай, а у тебя я так понял есть на руках эта ВЛЛ-ка...можешь сделать исправление в той функции, перекомпилировать ДЛЛ-ку и выслать мне, а то делфяка на руках не имеется.
|
|||
31
mzelensky
09.08.11
✎
11:23
|
Блин, я уж думал с Делфяком уже завязал...а тут нате, все-равно приходится садиться и вспоминать :(
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |