问个简单的读文件的问题~

一路奔跑 2005-04-18 01:32:37
对文件操作不熟~~

文件格式如下:
$GPGSA,A,3,08,28,20,11,07,,,,,,,,2.71,1.53,2.23*05
$GPRMC,070009,A,3953.7915,N,11620.0526,E,0.000,232.1,301204,5.6,W*6C
Gro,2327,
Pulse,47,
$GPGSA,A,3,28,20,11,07,,,,,,,,,2.71,1.53,2.23*0D
$GPRMC,070010,A,3953.7915,N,11620.0526,E,0.000,232.1,301204,5.6,W*64
Gro,2312,
Pulse,37,
........

我需要文件中一行如:
$GPRMC,070010,A,3953.7915,N,11620.0526,E,0.000,232.1,301204,5.6,W*64
这行数据~
做过GIS的朋友应该知道~下面还有好多同样的数据~~
烦哪位帮我搞定一下~谢了先~~
...全文
244 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fleshboy 2005-04-22
  • 打赏
  • 举报
回复
楼上的不错啊
Jim_King_2000 2005-04-22
  • 打赏
  • 举报
回复
若楼主给我一个GPS数据包的spec,我就可以把所有行的数据都给你提取了,然后用类封装起来。
Jim_King_2000 2005-04-22
  • 打赏
  • 举报
回复
谢谢
kongwe 2005-04-21
  • 打赏
  • 举报
回复
自己编了一下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main(int argc,char argv[])
{
ifstream InFile("e:\\in.txt"); //in.txt为输入文件,即原始文件
if(InFile.fail())
{
cerr<<"can't open file"
<<endl;
exit(0);
}
char str[20][80];
char buf[80];
int i=0;
while(!InFile.eof())
{
InFile>>buf;
if(strncmp(buf,"$GPRMC",5)==0) //匹配字符为“$GPRMC”
{
strcpy(str[i],buf);
i++;
}
}
cout<<"find "<<i<<" lines."<<endl; //提示找到的匹配的行数
InFile.close();
ofstream OutFile("e:\\out.txt"); //输出文件out.txt,保存匹配的行
for(i=i-1;i>=0;i--)
{
OutFile<<str[i];
}
OutFile.close();
return 0;
}
在VC++6.0下运行通过,没有作进一步的测试;)
Jim_King_2000 2005-04-21
  • 打赏
  • 举报
回复
/*终于写好了,调试通过。读取该行并分析。*/
#include <stdio.h>
#include <time.h>
#include <tchar.h>

#define MAX_NUM 1024

typedef struct tagGPSPACKET
{
time_t time;
TCHAR cStatus;
float fLatitude;
TCHAR cHemisphere_SN;
float fLongitude;
TCHAR cHemisphere_EW;
float fSpeed;
float fAngle;
long date;
float fMagnet;
TCHAR cMagnetDir;
}GPSPACKET;

int _tmain(int argc, _TCHAR *argv[])
{
FILE *fGPS;
TCHAR szLine[MAX_NUM];
TCHAR szHeader[] = _T("$GPRMC");
size_t nLen = sizeof(szHeader) / sizeof(TCHAR) - 1;
GPSPACKET GPS_Packet = {0, 0, 0.0, 0, 0.0, 0, 0.0, 0.0, 0L, 0.0, 0};

fGPS = _tfopen(_T("in.txt"), _T("r"));
if (fGPS == NULL)
{
_ftprintf(stderr, _T("Open file Failed!\n"));
return 1;
}
while(_fgetts(szLine, MAX_NUM, fGPS) != NULL)
{
if (_tcsncmp(szLine, szHeader, nLen)
== 0)
{
_stscanf(szLine + nLen, _T(",%ld,%c,%f,%c,%f,%c,%f,%f,%ld,%f,%c"),
&GPS_Packet.time,
&GPS_Packet.cStatus,
&GPS_Packet.fLatitude,
&GPS_Packet.cHemisphere_SN,
&GPS_Packet.fLongitude,
&GPS_Packet.cHemisphere_EW,
&GPS_Packet.fSpeed,
&GPS_Packet.fAngle,
&GPS_Packet.date,
&GPS_Packet.fMagnet,
&GPS_Packet.cMagnetDir);

_tprintf("\n%ld\n%c\n%f\n%c\n%f\n%c\n%f\n%f\n%ld\n%f\n%c\n",
GPS_Packet.time,
GPS_Packet.cStatus,
GPS_Packet.fLatitude,
GPS_Packet.cHemisphere_SN,
GPS_Packet.fLongitude,
GPS_Packet.cHemisphere_EW,
GPS_Packet.fSpeed,
GPS_Packet.fAngle,
GPS_Packet.date,
GPS_Packet.fMagnet,
GPS_Packet.cMagnetDir);
}
}

fclose(fGPS);

return 0;
}
kongwe 2005-04-20
  • 打赏
  • 举报
回复
楼上的程序测试过吗?
连iostream都没有包含也可以用cout吗?
niuman 2005-04-20
  • 打赏
  • 举报
回复
//gpsrecord.cpp

#include <stdlib.h>
#include <fstream.h>
#include <string.h>
#include <stdio.h>
#define MAXNUM 100
struct gpsrecord
{
char a0[10];
char a1[10];
char a2[10];
};
int main()
{
struct gpsrecord gps[MAXNUM];
ifstream inFile;
inFile.open("test.txt");
cout<<"Begin Search"<<endl;
int i=0,j;
while (inFile) {
inFile>>gps[i].a0;
inFile>>gps[i].a1;
inFile>>gps[i].a2;

inFile.get();

i++;
}
for(j=0;j<i;j++)
{
if(!strcmp(gps[j].a0,"$GPRMC") )
{
cout<<j<<':'<<' '<<gps[j].a0<<' '<<gps[j].a1<< ' '<<gps[j].a2<<endl;
}
}
system("PAUSE");
return 0;
}
一路奔跑 2005-04-20
  • 打赏
  • 举报
回复
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh

<1> 当前位置的格林尼治时间,格式为hhmmss

 例:073422 7小时34分点22 分。

<2> 状态, A 为有效位置, V为非有效接收警告,即当前天线视野上方的卫星个数少于3颗。

 

<3> 纬度, 格式为ddmm.mmmm

  例:3953.7902表示:39度537902分

<4> 标明南北半球, N 为北半球、S为南半球

  

<5> 径度,格式为dddmm.mmmm

  例:11620.0497表示:116度200497分

<6> 标明东西半球,E为东半球、W为西半球

  

<7> 地面上的速度,范围为0.0到999.9

  

<8> 方位角,范围为000.0到 359.9 度

  例:290.8????

<9> 日期, 格式为ddmmyy

  例:301204 04年/12月/30日

<10> 地磁变化,从000.0到 180.0 度

  例:5.6 ???

<11> 地磁变化方向,为E 或 W 例:W*6E ????

我要用的也只是其中一部分~~别人让我帮写的~~没时间,而且对文件操作不熟,谢了先~~~
Jim_King_2000 2005-04-20
  • 打赏
  • 举报
回复
据种种迹象表明这个文件应该是GPS的数据吧。告诉我以$GPRMC开头的行后面的数据代表什么意思。我抽空帮你写一个分析这一行的代码。
一路奔跑 2005-04-20
  • 打赏
  • 举报
回复
不熟悉文件操作~
一路奔跑 2005-04-20
  • 打赏
  • 举报
回复
我要从文件中读出以$GPRMC开头的各行,再对此行进行分析~~
Jim_King_2000 2005-04-19
  • 打赏
  • 举报
回复
楼主到底要干什么?读入这一行还是分析这一行?
seven2015 2005-04-19
  • 打赏
  • 举报
回复
study!
一路奔跑 2005-04-19
  • 打赏
  • 举报
回复
还是顶一下吧,不行就自己搞定了~~
一路奔跑 2005-04-18
  • 打赏
  • 举报
回复
yun le

69,375

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧