Имя: Пароль:
1C
1С v8
Подскажите алгоритм обработки больших строк.
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
(11) я вот тут брал:

http://guatalk.net/51-1s-rabota-s-com-portom/
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
Блин, я уж думал с Делфяком уже завязал...а тут нате, все-равно приходится садиться и вспоминать :(
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой