![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Ребята, помогите, пожалуйста! Обращается далеко не профессионал к профессионалам.Необходимо составить программу по обработке данных из файла . Сам файл состоит из повторяющихся 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
|
||||
|
||||
![]() В зависимости от размера файла и твоих предпочтений
либо считываешь файл построчно ( 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,['*']); типа Код:
list.Delimiter:= ','; list.DelimitedText := s; |
#3
|
||||
|
||||
![]() Алгоритм примерно такой...
1. Создать массив строк...если повтор 4 строк, то и массив такой же... 2. Считать в него n-ый блок... 3. Обработать каждую строку...удалить ненужные символы и разбить ее на слова(числа)...пустые слова заменить например словом 'empty'... 4. Получится 4 строки со словами... 5. Для удобства из этого массива можно сделать массив чисел... 6. Работать с массивом чисел... 7. В мемо1 выводить начальные строки, в мемо2 выводить обработанные строки для контроля и наглядности... P.S. Алгоритмов можно придумать море и по количеству кода, и по удобству, и по быстродействию...но до начала оптимизации я проделал именно так... В начале был Бит, потом Байт и только потом появилось Слово... |
#4
|
||||
|
||||
![]() вот посмотри небольшой unit для работы с NMEA
|