Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2010, 22:05   #1
fiascko
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию обработка сообщений из файла

Ребята, помогите, пожалуйста! Обращается далеко не профессионал к профессионалам.Необходимо составить программу по обработке данных из файла . Сам файл состоит из повторяющихся 4 строк:$GPGGA,072520.000,5553.8635,N ,03805.6086,E,1,07,1.8,141.5,M,14.1 ,M,,0000*5D
$GPGSA,A,3,18,19,21,22,26,06,03,,,, ,,3.8,1.8,3.3*33
$GPGSV,3,1,12,22,75,160,42,06,58,21 4,41,03,57,236,42,18,53,072,37*7C
$GPGSV,3,2,12,19,51,289,42,26,38,11 8,44,21,28,103,38,14,17,159,28*71
$GPGSV,3,3,12,15,13,032,,24,12,099, 24,27,08,065,20,09,04,075,*7D
$GPRMC,072520.000,A,5553.8635,N,038 05.6086,E,0.11,200.74,040310,,*0E

Далее цикл повторяется, но уже без строк $GPGSV. Эта строка повторяется через 5 циклов, то есть в первом, шестом, одиннадцатом...
Цель заключается в том , чтобы любым методом импортировать данный файл в Delphi (можно через Мемо), а затем: ввести переменные равные соответствующим элементам строк для дальнейшей работы.
Примечания: 1.в обработке данных строк не принимают участия символы, стоящие после * (так что их можно удалить), 2.изначально каждое число в любой строке занимает строго отведенное для него место (так в $GPGSA,A,3,18,19,21,22,26,06,03,,,, ,,3.8,1.8,3.3*33 через запятые обозначаются элементы, которые просто на данном этапе отсутствуют, и таким образом, для обработки результатов число 3.8 идущее после кучи запятых должно иметь к примеру номер элемента не Аi11, а Ai17.
Был бы очень признателен, если кто-нибудь смог мне помочь. Очень нужно. Заранее благодарен.
Вложения
Тип файла: txt файл.txt (2.8 Кб, 119 просмотров)
fiascko вне форума Ответить с цитированием
Старый 23.03.2010, 22:45   #2
W0LF
Форумчанин
 
Аватар для W0LF
 
Регистрация: 28.03.2008
Сообщений: 940
По умолчанию

Ишь что задумал...
Цитата:
...Необходимо составить программу...
Вам тут, что - Стол заказов? fiascko, вам прямая дорога во фриланс...
W0LF вне форума Ответить с цитированием
Старый 24.03.2010, 08:05   #3
fiascko
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию

я прошу помочь советом, а не полнотью создавать программу.
Меня интересует следующее:
1. как удобнее будет обрабатывать: напрямую из файла, или через промежточную запись, к примеру, в МЕМО?
2. Какие предварительные изменения необходимо сделать с файлом для дальнейшей обработки ( кпримеру, заменить запятые пробелами...)?
3. нужно ли, на ваш взгляд удалять ненужные символы после * для упрощения работы?
fiascko вне форума Ответить с цитированием
Старый 24.03.2010, 08:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
напрямую из файла, или через промежточную запись, к примеру, в МЕМО?
Через промежуточную. Рекомендую загружать все в TStringList - и работать с ним аки с массивом строк
Цитата:
Какие предварительные изменения необходимо сделать с файлом для дальнейшей обработки
Ниче не нужно делать, все обрабатывай после того как загрузишь непосредственно в памяти
Цитата:
нужно ли, на ваш взгляд удалять ненужные символы после * для упрощения работы?
Опять таки не думаю что это нужно

Я только не очень понял что всетки нужно с этими данными делать...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.03.2010, 08:51   #5
fiascko
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию

хорошо, для большего понимания дела, немного предыстории. Данное сообщение - информация, поступаемая от спутников GPS. строка $GPGGA,072520.000,5553.8635,N ,03805.6086,E,1,07,1.8,141.5,M,14.1 ,M,, содержит время сообщния 072520.000, координаты 5553.8635,N ,03805.6086,E высота, 141.5, количество спутников 07 и другие прибомбасы.
$GPGSA,A,3,18,19,21,22,26,06,03,,,, ,,3.8,1.8,3.3*33 содержит номера спутников 18,19,21,22,26,06,03 и покзатели спутников (3 штуки) 3.8,1.8,3.3
Строка, состоящая из 3 подстрок
$GPGSV,3,1,12,22,75,160,42,06,58,21 4,41,03,57,236,42,18,53,072,37*7C
$GPGSV,3,2,12,19,51,289,42,26,38,11 8,44,21,28,103,38,14,17,159,28*71
$GPGSV,3,3,12,15,13,032,,24,12,099, 24,27,08,065,20,09,04,075,*7D
Содержит количество подстрок GSV 3, номер подстроки (1,2,3). Количество видимых спутников 12, а далее идут характеристики спутников (4 подряд числа). Так (см. строку GSV 1: 22,75,160,42 (22-номер спутника, 75-высота, 160-азимут, 42-показатель сигнала*), и так для каждого из 12 спутников.
строка
$GPRMC,072520.000,A,5553.8635,N,038 05.6086,E,0.11,200.74,040310,,*0E
содержит опять время, координаты, скорость движения, дата (040310-DDMMYY).
И эти 4 сообщения характеризуют различные параметры спутников, а также координаты на одну секунду(один цикл) (время, указанное в GGA или RMC).
Таким образом, мне необходимо для большоге массива циклов произвести обработку,( к примеру, средние координаты, средняя высота, построить графики движения спутников по высоте и азимуту и т.п.)
fiascko вне форума Ответить с цитированием
Старый 24.03.2010, 09:02   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Рутины много, то технически ничего сложного нет. Нужно парсить строки и вычленять из них нужные записи. Если там как Вы говорите с периодичностью в пять строк какая-то информация появляется это тоже эллементарно делается - в теле цикла добавляете проверку if i mod N = 0 then... где N - период повторения.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 24.03.2010, 09:08   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не знаю твое точное ТЗ, но банальные методы знаешь ли еще не отменили
Так что вот тее проектик. Пробуй, спрашивай.

Что касается моего мнения - ябы эти данные проимпортировал в БД, на разный тип данных разные таблицы, и уже из нее делал бы нужную выборку.
Вложения
Тип файла: rar Спутники.rar (184.6 Кб, 9 просмотров)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.03.2010, 16:37   #8
fiascko
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию

всем спасибо. так как изучать новое времени нет, то пытаюсь создавать обрабатывающую программу по старинке...
суть в следующем:
беру файл с данными, запихиваю в Мемо, далее из мемо вывожу нужные мне параметры. вот попытался вывести из строк параметр-время и подсчитать среднее время наблюдения
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f:textfile;
fname:string[100];
buf:string[100];
{GGA,GSA,GSV,RMC:string;  }
i,n:integer;
summ,summn:real;
utc:array[1..100000] of real;
utc1:array[1..100000]of string;
begin
fname:=edit1.text;
assignfile(f,fname);
reset(f);
while not EOF(f) do begin
      readln(f,buf);
      memo1.Lines.Add(buf);
      end;
     closefile(f);
      {summ:=1;}
    for i:=0 to Memo1.Lines.Count do
   if Copy(Memo1.Lines.Strings,1,6)='$GPGGA' then    begin

       utc1:=copy(memo1.Lines.Strings,8,10);
       memo2.Lines.Add(utc1);
       {summ:=summ+utc1;             }
       end;
       n:=0;
       summ:=0;
     for i:=1 to memo2.lines.count-1 do    begin
    { utc:=strtofloat(memo2.lines.strings);
     summ:=summ+utc;  }
     n:=n+1;
     end;
    summn:=summ/n;
Не моуг понять, почему не работает процедура (выделенная жирным курсивом).
Из всех строк
$GPGGA 072520.000 5553.8635 N 03805.6086 E 1 07 1.8 141.5 M 14.1 M 0000 5D
$GPGSA A 3 18 19 21 22 26 06 03 3.8 1.8 3.3 33
$GPGSV 3 1 12 22 75 160 42 06 58 214 41 03 57 236 42 18 53 072 37 7C
$GPGSV 3 2 12 19 51 289 42 26 38 118 44 21 28 103 38 14 17 159 28 71
$GPGSV 3 3 12 15 13 032 24 12 099 24 27 08 065 20 09 04 075 7D
$GPRMC 072520.000 A 5553.8635 N 03805.6086 E 0.11 200.74 040310 0E
$GPGGA 072521.000 5553.8635 N 03805.6086 E 1 07 1.8 141.5 M 14.1 M 0000 5C
Хочу подсчитать среднее время (время дается в строке $GPGGA сразу за названием строки 072520.000 ....)
Все времена загнал в МЕМО2. ошибки до компиляции программа не показывает. Когда нажимаю БАТОН , вылезает сообщение с ошибкой.

У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось fiascko; 28.03.2010 в 17:10.
fiascko вне форума Ответить с цитированием
Старый 28.03.2010, 16:43   #9
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
 utc:=strtofloat(memo2.lines.strings[N]
Где N номер строки
psycho-coder вне форума Ответить с цитированием
Старый 28.03.2010, 16:48   #10
fiascko
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию

Вот так вот было
Код:
for i:=1 to memo2.lines.count-1 do    begin
    { utc[i]:=strtofloat(memo2.lines.strings[i]);
     summ:=summ+utc[i];  }
Второе "китайское" предупреждение:
У нас принято оформлять код специальным тэгом - при помощи кнопочки "#".
Только...
И не значком #.
И не РНР-кодом.
И не значком цитаты.
И не собственными "ручками".
Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Модератор

Последний раз редактировалось fiascko; 28.03.2010 в 17:11.
fiascko вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка сообщений в приложении без окон. kalexi Win Api 2 26.06.2009 20:12
Обработка сообщений в консольных приложениях Mixasik Общие вопросы Delphi 2 06.06.2009 22:50
Перехват и обработка сообщений Mail.ru агента NikLik Работа с сетью в Delphi 4 22.07.2008 15:39
Перехват сообщений от Службы сообщений (Messenger) SJMS Win Api 6 17.07.2008 10:26
Обработка сообщений иконки трея The_Darkness Win Api 18 15.07.2008 16:07