Как загрузить только определенные строки из текстового файла в зависимости от того, как они начинаются в C и C ++?

0

У меня есть некоторые данные в файле, как показано ниже:

[$ GPGSA, A, 3,28,09,26,15,08,05,21,24,07 ,, 1,6,1,0,1,3 * 3A, $ GPRMC, 151018000, A, 5225,9627, N, 00401,1624, W, 0,11,104,71,210214, * 14, $ GPGGA, 151019.000,5225,9627, N, 00401,1624, W, 1,09,1,0,38,9, M, 51,1, M, 0000 * 72, $ GPGSA, A, 3, 28,09,26,15,08,05,21,24,07 ,, 1,6,1,0,1,3 * 3A, $ GPGSV, 3,1,12,26,80,302,44,09,55,063,40, 05, 53, 111, 39, 08, 51, 509, 37 *

Файл содержит много тысяч строк, и каждая строка начинается с определенного тега, который содержит определенные данные.

Мне нужны строки, начинающиеся с $ GPGGA и $ GPGSV.

Как я могу загрузить только эти строки в структуру связанного типа списка и сохранить их порядок, не загружая в другие строки, которые мне не нужны?

Вот некоторые из моего кода. Детали fscanf пока неизвестны. Все, что я знаю, что нужно делать, - это загрузить строки в строку в связанный список.

 if ((head)==NULL){
     (head) = malloc(sizeof(GPSList));
     current = (head);
    }else{
        while(current->next!=NULL){
            current = current->next;
        }
    }



 while( fscanf(fa,"", ) != EOF) {//format will be done later
        // Create new ship here.
        strcpy(current->dataGPS.Latitude, Latitude);
        strcpy(current->dataGPS.Longitude, Longitude);

        current->dataGPS.Time = Time;
        current->dataGPS.NumSat = NumSat;
        current->dataGPS.SNR =SNR;




        GPSList *next = malloc(sizeof(GPSList));
        current->next = next;
        current = next;
  • 0
    Почему (head) = ... вместо head = ... ?
Теги:
file
load

2 ответа

0
Лучший ответ

C++ код:

std::string line;

while(std::getline(xInFile, line)) {
    // Check if a line starts with what you need

    if(std::regex_match(line, "/^(?:(?:\$GPGGA)|(?:\$GPGSV)).*$/")) {
        // Use the line. For instance, put it to some array.
    };
}

Как читать файл по строкам: как читать длинные строки из текстового файла в C++?

Подробнее о регулярных выражениях: Regular-Expressions.info - Учебное пособие по регулярному выражению , примеры и ссылки - шаблоны Regexp

Подробнее о std :: regex_match(): std :: regex_match - cppreference.com

Подробнее о std :: getline(): std :: getline - cppreference.com

  • 0
    Так что же делает --- while (std :: getline (xInFile, line)) {- Do?
  • 0
    Он получает строки из вашего файла по одной, пока файл не закончится.
Показать ещё 1 комментарий
1

Откройте файл. Перебирайте строки в файле. Прочитайте каждую строку. Если она начинается с $GPGGA или $GPGSV, добавьте ее в структуру типа связанного списка. В противном случае перейдите к следующей строке. Когда вы достигнете конца файла, все готово.

  • 0
    Все, что я делал раньше, это загружал в каждую строку файла ... со всеми строками одинакового формата, это было легко. Я не знаю, как это сделать.
  • 1
    Какую часть вы не знаете, как это сделать? Разместите свой код. (Я не могу помочь вам определить, начинается ли строка определенными символами, не зная, какой язык вы используете, в какой форме у вас есть строка и т. Д. Может быть, strncmp - это то, что вам нужно, возможно, string::find . A Неопределенный вопрос не будет иметь конкретного ответа.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню