首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

读较比复杂.txt

2013-03-27 
读较复杂.txt如图,目的是跳过#开头的行,然后将以数字开头的行的红框中的数字读入二维数组。到底该怎么写才

读较复杂.txt

如图,目的是跳过#开头的行,然后将以数字开头的行的红框中的数字读入二维数组。
到底该怎么写才能实现呢?
读较比复杂.txt
~~求赐教~~~


读较比复杂.txt 跳过#读txt 二维数组 有没有人会~
[解决办法]
你这个数据格式很标准啊,用TStringList对象载入文本,逐行遍历,判断每行每一个字符不是#的,就进行分析,可以用sscanf来将每段数据分离出来。
[解决办法]
一个循环搞定
FILE *fp;
double data[8];
char Line[MaxLen];
fp=fopen(filename,"r");
if(fp).........
memset(Line,0,MaxLen);
for(N=0;fgets(fp,Line,MaxLen)!=NULL;)
{ if(sscanf(Line,"%*s%*s%*s%*s%*s%*s%lf%lf%lf%lf%lf%lf%*lf%*lf%lf%lf",
    data,data+1,data+2,data+3,data+4,data+5,data+6,data+7)!=8)continue; //带*的是要跳过的
  ......  此处将data赋给数组
  N++;
}

}
[解决办法]
先把所有的数据都读进来,在挑出红框中的数据存入数组
[解决办法]
你这个文件格式是很标准的啊

也有规律的啊

用TStringList

就可以解决你这个问题了

晚上回家给你写一个,我现在在外面。
[解决办法]


void __fastcall TForm1::SplitString(char *destiniation,const char *source)//将每行数据间的空格转换成‘
[解决办法]
’,便于后续数据处理,连续几个空格也是用一个‘
[解决办法]
’代替
{
     int i=0,j=0;
     bool flag0=false,flag1=false;

     while(source[i]!='\0')
     {
         if(source[i]!=' ')
         {
             destiniation[j++] = source[i];
             flag0 = true;
             flag1 = false;
         }
         else
         {
              if(flag0 && !flag1)
              {
                  destiniation[j++]='
[解决办法]
';
              }
              flag0=false;
              flag1=true;
         }
         i++;
     }
     destiniation[j++]='\0';
}
//---------------------------------------


void __fastcall TForm1::cmdS0Click(TObject *Sender)
{
    TStringList *StringList0=new TStringList();//读取文件
    TStringList *StringList1=new TStringList();//标准化文件
    TStringList *StringList2=new TStringList();//通过分隔符把每一条记录读取进来
    int i,count;
    char string[1024];
    StringList0->LoadFromFile("s.txt");
    count = StringList0->Count;

    for(i=0; i<count;i++)
    {
        SplitString(string,StringList0->Strings[i].c_str());
        StringList1->Add(AnsiString(string));  //如果不需要StringList1和StringList2,那么下面的代码处理也可以放在这里
    }
//StringList1里就是需要处理的数据,‘
[解决办法]
’为分隔符
    vector <float> fVector ;
    StringList2->Delimiter = '
[解决办法]
'   ;
    for(int i = 0; i < StringList1->Count; i++)
    {
        StringList2->DelimitedText = StringList2->Strings[i].Trim() ;
        for(int j = 0 ; j < 6; j++)   //读取第一个红色圈子里的数据,从第八个数据开始,连续6列
               fVector.push_back(StringList2->Strings[j+8]) ;
    }    
//其他列的数据处理方式类似

    delete StringList0;
    delete StringList1;
    delete StringList2;
}
//---------------------------------------


[解决办法]

//处理所有行列数据可以定义如下两个变量
    vector<float> recLine;               //一行记录
    vector< vector<float> > recSet;      //所有行记录数据

热点排行