Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.03.2010, 08:20
fiascko fiascko вне форума
Прохожий
 
Регистрация: 24.03.2010
Сообщения: 1
Репутация: 10
По умолчанию Обработка сообщения из файла.txt

Ребята, помогите, пожалуйста! Обращается далеко не профессионал к профессионалам.Необходимо составить программу по обработке данных из файла . Сам файл состоит из повторяющихся 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.
Был бы очень признателен, если кто-нибудь смог мне помочь. Очень нужно. Заранее благодарен.
я прошу помочь советом, а не полнотью создавать программу.
Меня интересует следующее:
1. как удобнее будет обрабатывать: напрямую из файла, или через промежточную запись, к примеру, в МЕМО?
2. Какие предварительные изменения необходимо сделать с файлом для дальнейшей обработки ( кпримеру, заменить запятые пробелами...)?
3. нужно ли, на ваш взгляд удалять ненужные символы после * для упрощения работы?
Ответить с цитированием
  #2  
Старый 24.03.2010, 09:02
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

В зависимости от размера файла и твоих предпочтений
либо считываешь файл построчно ( ReadLn ) либо загружаешь в TStringList ( LoadFromFile ).
Далее построчно обрабатываешь.
* и далее убираешь сразу чтоб не мешалось
и извлекаешь все по очереди.
Вот это может тебе облегчить жизнь
Код:
function ExtractSubstr(const S: string; var Pos: Integer;
  const Delims: TCharSet): string;
var
  I: Integer;
begin
  I := Pos;
  while (I <= Length(S)) and not (S[i] in Delims) do
    Inc(I);
  Result := Copy(S, Pos, I - Pos);
  if (I <= Length(S)) and (S[i] in Delims) then
    Inc(I);
  Pos := I;
end;
Например удаляем * и далее
Код:
    pos := 1;
    s := ExtractSubstr(s, pos,['*']);
А разбить по запятым можно используя свойства второго TStringList- Delimiter и DelimitedText
типа
Код:
list.Delimiter:= ',';
list.DelimitedText := s;
Ответить с цитированием
  #3  
Старый 24.03.2010, 09:06
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Алгоритм примерно такой...

1. Создать массив строк...если повтор 4 строк, то и массив такой же...
2. Считать в него n-ый блок...
3. Обработать каждую строку...удалить ненужные символы и разбить ее на слова(числа)...пустые слова заменить например словом 'empty'...
4. Получится 4 строки со словами...
5. Для удобства из этого массива можно сделать массив чисел...
6. Работать с массивом чисел...
7. В мемо1 выводить начальные строки, в мемо2 выводить обработанные строки для контроля и наглядности...

P.S. Алгоритмов можно придумать море и по количеству кода, и по удобству, и по быстродействию...но до начала оптимизации я проделал именно так...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #4  
Старый 24.03.2010, 11:56
Аватар для movnet
movnet movnet вне форума
Начинающий
 
Регистрация: 24.07.2008
Сообщения: 127
Версия Delphi: Delphi 7
Репутация: 23
Сообщение

вот посмотри небольшой unit для работы с NMEA
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:59.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025