我在一个文件中有一些数据,如下所示:
[GPGSA美元,3,28岁,09年,26日,15日,08年,05年,21日,24日,07年…1.6,1.0,1.3 * 3,GPRMC美元,151018.000,,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米,51.1米,0000 * 72,GPGSA美元,3,28岁,09年,26日,15日,08年,05年,21日,24日,07年…1.6,1.0,1.3 * 3,GPGSV美元,3,1,12日,26日,80302年,44岁,09年55063年,40岁,05年,53191年,39岁,08年,51059年,37 * 79,GPGSV美元3 2,12日,28岁,43112年,34岁,15日,40284年,42岁,21岁,18305年,33岁,18057年,27 * 7 e,
该文件包含数千行,每行以保存特定数据的特定标记开始。
我只需要以$GPGGA和$GPGSV开头的行。
我怎样才能只将这些行加载到链表类型结构中并保持它们的顺序,而不必加载我不需要的其他行?
这是我的一些代码。扫描的细节尚不清楚。我所知道要做的就是将文件一行一行加载到链表中。
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 -正则表达式教程,示例和参考-正则表达式模式
关于std::regex_match(): std::regex_match - cppreference.com的更多信息
关于std::getline(): std::getline - cppreference.com的更多信息
打开文件。遍历文件中的行。把每一行都读进去。如果以$GPGGA
或$GPGSV
开头,将其添加到链表类型结构中。否则,继续下一行。当您到达文件的末尾时,您就完成了。