У меня есть некоторые данные в файле, как показано ниже:
[$ 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;
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
Откройте файл. Перебирайте строки в файле. Прочитайте каждую строку. Если она начинается с $GPGGA
или $GPGSV
, добавьте ее в структуру типа связанного списка. В противном случае перейдите к следующей строке. Когда вы достигнете конца файла, все готово.
strncmp
- это то, что вам нужно, возможно, string::find
. A Неопределенный вопрос не будет иметь конкретного ответа.)
(head) = ...
вместоhead = ...
?