如何从文本文件中只加载某些行,这取决于它们在C和c++中的开始方式

How to load only certain lines from a text file depending on how they start in C and C++?

本文关键字:取决于 开始 c++ 方式 文件 文本 加载      更新时间:2023-10-16

我在一个文件中有一些数据,如下所示:

[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开头,将其添加到链表类型结构中。否则,继续下一行。当您到达文件的末尾时,您就完成了。