?? getgmn.cpp
字號:
///////////////////////////////////////// 21 84
#include "GetGMN.h"
#include "Rinex.h"
#include "Substr.h"
#include <cstdlib>
#include <list>
#include <fstream>
#include "iostream.h"
#include "Time.h"
GMNHDR GetGMNHDR(char *filename)//導航電文頭文件
{
GMNHDR gmnh;
PGMNHDR pgmnh=& gmnh;//定義指針
/*
ifstream infile(filename,ios::in|ios::nocreate);//讀取導航電文頭文件
if(!infile)
{
cout<<"open file error!"<<endl;
exit(1);
}
*/
FILE *fp = fopen(filename,"r");
// while(!infile.eof())
while(!feof(fp))
{
char str[100];
// infile.getline(str,81,'\n');
fgets(str,100,fp);
if(!strcmp("RINEX VERSION / TYPE",substr(str,60,79)))
{
pgmnh->ver_major=atoi(substr(str,5,5));
pgmnh->ver_minor=atoi(substr(str,7,8));
// cout<<"RINEX VERSION / TYPE "<<" "<<pgmnh->ver_major<<"."<<pgmnh->ver_minor<<endl<<endl;
}
if(!strcmp("PGM / RUN BY / DATE",substr(str,60,78)))
{
strcpy(pgmnh->program_name,substr(str,0,19));
strcpy(pgmnh->agency_name,substr(str,20,39));
strcpy(pgmnh->create_file_time,substr(str,40,59));
// cout<<"PGM / RUN BY / DATE"<<" "<<pgmnh->program_name<<" "<<pgmnh->agency_name<<" "<<pgmnh->create_file_time<<endl<<endl;
}
if(!strcmp("ION ALPHA",substr(str,60,68)))
{
pgmnh->ion_alpha[0]=atof(substr(str,2,13));
pgmnh->ion_alpha[1]=atof(substr(str,14,25));
pgmnh->ion_alpha[2]=atof(substr(str,26,37));
pgmnh->ion_alpha[3]=atof(substr(str,38,49));
// cout<<"ION ALPHA"<<" "<<pgmnh->ion_alpha[0]<<" "<<pgmnh->ion_alpha[1]<<" "<<pgmnh->ion_alpha[2]<<" "<<pgmnh->ion_alpha[3]<<endl<<endl;
}
if(!strcmp("ION BETA",substr(str,60,67)))
{
pgmnh->ion_beta[0]=atof(substr(str,2,13));
pgmnh->ion_beta[1]=atof(substr(str,14,25));
pgmnh->ion_beta[2]=atof(substr(str,26,37));
pgmnh->ion_beta[3]=atof(substr(str,38,49));
// cout<<"ION BETA"<<" "<<pgmnh->ion_beta[0]<<" "<<pgmnh->ion_beta[1]<<" "<<pgmnh->ion_beta[2]<<" "<<pgmnh->ion_beta[3]<<endl<<endl;
}
if(!strcmp("DELTA-UTC: A0,A1,T,W",substr(str,60,79)))
{
pgmnh->delta_utc.A0=atof(substr(str,3,21));
pgmnh->delta_utc.A1=atof(substr(str,22,40));
pgmnh->delta_utc.T =atof(substr(str,41,49));
pgmnh->delta_utc.W =atof(substr(str,50,58));
// cout<<"DELTA-UTC: A0,A1,T,W"<<" "<<pgmnh->delta_utc.A0<<" "<<pgmnh->delta_utc.A1<<" "<<pgmnh->delta_utc.T<<" "<<pgmnh->delta_utc.W<<endl<<endl;
}
if(!strcmp("LEAP SECONDS",substr(str,60,71)))
{
pgmnh->leap_seconds=atof(substr(str,0,5));
// cout<<"LEAP SECONDS"<<" "<<pgmnh->leap_seconds<<endl;
}
if(!strcmp("END OF HEADER",substr(str,60,72)))
{
break;
}
}//while 循環結束
// infile.close();
fclose(fp);
return gmnh;
}
void GetGMNREC(char* filename, list <PGMNREC>& RecList)//導航電文記錄數據
{
/* ifstream infile(filename,ios::in|ios::nocreate); // 定義輸入文件流對象,以輸入方式打開磁盤文件 filename
if(!infile)
{
cerr<<"open file error!"<<endl;
exit(1);
}
*/
FILE *fp = fopen(filename,"r");
// while(!infile.eof())
while(!feof(fp))
{
char str[100];
// infile.getline(str,80,'\n');
fgets(str,100,fp);
if(!strcmp("END OF HEADER",substr(str,60,72)))
{
// while(!infile.eof())
while(!feof(fp))
{
PGMNREC pgmnr=new GMNREC;//定義指針
// infile.getline(str,80,'\n');
fgets(str,100,fp);
pgmnr->PRN=atoi(substr(str,0,1));
pgmnr->TOC.year=atoi(substr(str,3,4));
pgmnr->TOC.month=atoi(substr(str,6,7));
pgmnr->TOC.day=atoi(substr(str,9,10));
pgmnr->TOC.hour=atoi(substr(str,12,13));
pgmnr->TOC.minute=atoi(substr(str,15,16));
pgmnr->TOC.second=atof(substr(str,17,21));
pgmnr->ClkBias=atof(substr(str,22,40));
pgmnr->ClkDrift=atof(substr(str,41,59));
pgmnr->ClkDriftRate=atof(substr(str,60,78));
// infile.getline(str,85,'\n');
fgets(str,100,fp);
pgmnr->IODE=atof(substr(str,3,21));
pgmnr->Crs=atof(substr(str,22,40));
pgmnr->DetlaN=atof(substr(str,41,59));
pgmnr->M0=atof(substr(str,60,78));
// infile.getline(str,85,'\n');
fgets(str,100,fp);
pgmnr->Cuc=atof(substr(str,3,21));
pgmnr->e=atof(substr(str,22,40));
pgmnr->Cus=atof(substr(str,41,59));
pgmnr->SqrtA=atof(substr(str,60,78));
// infile.getline(str,85,'\n');
fgets(str,100,fp);
pgmnr->toe=atof(substr(str,3,21));
pgmnr->Cic=atof(substr(str,22,40));
pgmnr->Omega=atof(substr(str,41,59));
pgmnr->Cis=atof(substr(str,60,78));
// infile.getline(str,85,'\n');
fgets(str,100,fp);
pgmnr->i0=atof(substr(str,3,21));
pgmnr->Crc=atof(substr(str,22,40));
pgmnr->omega=atof(substr(str,41,59));
pgmnr->OmegaDot=atof(substr(str,60,78));
// infile.getline(str,85,'\n');
fgets(str,100,fp);
pgmnr->iDot=atof(substr(str,3,21));
pgmnr->CodesOnL2Channel=atof(substr(str,22,40));
pgmnr->GPSWeek=atof(substr(str,41,59));
pgmnr->L2PDataFlag=atof(substr(str,60,78));
// infile.getline(str,85,'\n');
fgets(str,100,fp);
pgmnr->SVAccuracy=atof(substr(str,3,21));
pgmnr->SVHealth=atof(substr(str,22,40));
pgmnr->TGD=atof(substr(str,41,59));
pgmnr->IODC=atof(substr(str,60,78));
// infile.getline(str,85,'\n');
fgets(str,100,fp);
pgmnr->TransTimeOfMsg=atof(substr(str,3,21));
pgmnr->Spare1=atof(substr(str,22,40));
pgmnr->Spare2=atof(substr(str,41,59));
pgmnr->Spare3=atof(substr(str,60,78));
pgmnr->TOE.wn=pgmnr->GPSWeek;
pgmnr->TOE.tow.sn=long(int(pgmnr->toe));
pgmnr->TOE.tow.tos=pgmnr->toe-pgmnr->TOE.tow.sn;
RecList.push_back(pgmnr);
}
}
}
fclose(fp);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -