我有個txt檔案,內容如下:
DESCRIPTION=主干道
NAME=書城東路2967平米
CLOSED=YES
PERIMETER=705.89 m
ENCLOSED_AREA=0.002967 sq km
主干道=書城東路
635218.689,3158367.242,-999999
635218.692,3158367.083,-999999
DESCRIPTION=主干道
NAME=申城東路2815平米
CLOSED=YES
PERIMETER=775.62 m
ENCLOSED_AREA=0.002815 sq km
主干道=申城東路
635528.657,3158186.696,-999999
635528.657,3158186.696,-999999
DESCRIPTION=主干道
NAME=申城北路2248平米
CLOSED=YES
PERIMETER=761.95 m
ENCLOSED_AREA=0.002248 sq km
主干道=申城北路
635535.701,3158553.462,-999999
635539.669,3158557.108,-999999
635537.755,3158559.637,-999999
DESCRIPTION=廣場
NAME=興城廣場1648平米
CLOSED=YES
PERIMETER=363.97 m
ENCLOSED_AREA=0.001648 sq km
廣場=興城廣場
635206.396,3158192.482,-999999
635206.396,3158192.482,-999999
635206.372,3158192.431,-999999
DESCRIPTION=廣場
NAME=興城廣場8840平米
CLOSED=YES
PERIMETER=767.09 m
ENCLOSED_AREA=0.00884 sq km
廣場=興城廣場
635157.547,3158220.332,-999999
后面還有很多的類似的內容。。。。
檔案是由很多格式相同的段落組成。
需要的功能是: 將相同DESCRIPTION下的ENCLOSED_AREA這一項的數值求和。
我現在通過CFile物件讀到pBuff中,然后該如何判斷,取出所有同一DESCRIPTION下的ENCLOSED_AREA呢?
謝謝各位了
uj5u.com熱心網友回復:
這個應該沒什么難點,就是決議資料,你自己定義好一個資料結構,比如typedef struct _tagXXXXINFO
{
TCHAR szDescription[XXX];
TCHAR szName[XXX];
....
}XXXINFO;
決議檔案內容,決議一個,就動態分配一個該型別的物件指標,將資料正確填充,然后將該指標進入鏈表中(或者使用STL的容器類如map,主要是定義好key是什么,添加的時候需要先查詢一下之前是否有條件符合的項,即相同的相同DESCRIPTION下的ENCLOSED_AREA),依次進行下去。
uj5u.com熱心網友回復:
僅供參考://NAME: essaie bla bla
//DIMENSION: 8
//DATA
//1 14 15
//2 11 10
//3 6 4
//4 7 13
//5 9 21
//6 19 3
//7 1 5
//8 8 8
//EOF
//
// 文本檔案中可能還含有其他內容,但是需要用到的內容即以上
//比如data.txt:
//NAME: essaie bla bla
//其它內容
//DIMENSION: 8
//其它內容
//DATA
//其它內容
//1 14 15
//其它內容
//2 11 10
//其它內容
//3 6 4
//其它內容
//4 7 13
//其它內容
//5 9 21
//其它內容
//6 19 3
//其它內容
//7 1 5
//其它內容
//8 8 8
//其它內容
//EOF
// 目標是要獲取NAME后字串,DIMENSION后數值,以及DATA以下的數值
// 其中NAME就是隨便個字句,DIMENSION是城市數量,DATA以下是城市編號,X坐標,Y坐標
// 所有的這些將賦值給一個事先定義好的結構
#include <stdio.h>
#include <string.h>
#define MAXCPL 80 //每行最大字符數
#define MAXCITY 100 //每組資料中DATA最多項數,DIMENSION的最大值
#define MAXNAMEL 32 //NAME最大長度
struct S {
char NAME[MAXNAMEL+1];
int DIMENSION;
struct D {
int NO;
int X;
int Y;
} DATA[MAXCITY];
} s;
FILE *f;
int st,n,i;
char ln[MAXCPL];
int main() {
f=fopen("data.txt","r");
if (NULL==f) {
printf("Can not open file data.txt!\n");
return 1;
}
st=0;
n=0;
while (1) {
if (NULL==fgets(ln,MAXCPL,f)) break;
if (st==0) {
if (1==sscanf(ln,"NAME: %32[^\n]",s.NAME)) st=1;
} else if (st==1) {
if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;
} else if (st==2) {
if (0==strcmp(ln,"DATA\n")) st=3;
} else if (st==3) {
if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {
n++;
if (n>=MAXCITY || n>=s.DIMENSION) break;
}
}
}
fclose(f);
printf("s.NAME=[%s]\n",s.NAME);
printf("s.DIMENSION=%d\n",s.DIMENSION);
for (i=0;i<n;i++) {
printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);
}
return 0;
}
//s.NAME=[essaie bla bla]
//s.DIMENSION=8
//s.DATA[0].NO,X,Y=1,14,15
//s.DATA[1].NO,X,Y=2,11,10
//s.DATA[2].NO,X,Y=3,6,4
//s.DATA[3].NO,X,Y=4,7,13
//s.DATA[4].NO,X,Y=5,9,21
//s.DATA[5].NO,X,Y=6,19,3
//s.DATA[6].NO,X,Y=7,1,5
//s.DATA[7].NO,X,Y=8,8,8
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/145276.html
標籤:基礎類
上一篇:求助C++高手,多執行緒檔案傳輸,大的部分完成,還需要最后的完善
下一篇:求助API串口通信編程
