怎样把数据存起来,我用new分配了一个动态数组。我是一行行的读取文件的,我要怎么读取一行存一行呢?

菜鸟o 发布于 2017/03/08 09:35
阅读 204
收藏 0

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define BUFSIZE 1024

typedef struct{
    double x, y, z;
} POINT3;

typedef struct {
    char name[16];
    long ID, laneNnm;
    long pointNum;
    POINT3 *point;
} LINK;

long allLinkNum;
LINK *allLink;

void processArray()
{
    allLinkNum = 3;
    
    int *p = new int[allLinkNum];
    
    p[0] = 4;
    p[1] = 2;
    p[2] = 2;
    
    //    int p[3] = {4, 2, 2};
    allLink = new LINK[allLinkNum];
    for(int i = 0; i < allLinkNum; i++)
    {
        allLink[i].point = new POINT3[p[i]];
    }
    
    allLink[1].pointNum = p[1];
    allLink[1].point[0].x = 10;
    allLink[1].point[0].y = 10;
    
    printf("%f  %f\n", allLink[1].point[0].x, allLink[1].point[0].y);
    
    //    delete[] allLink;
}


void findPathLINK(FILE *fpin, char *keyname)
{
    int allLinkNum = 0, allLink;
    char buf[BUFSIZE], keyword[16], name[16], temp[16];
    int count = 0, ID, lane = 0, link = 0;
    double x0, y0, x1, y1;
    bool findOK = false;
    
    while(!feof(fpin))     {     
        
        fgets(buf, BUFSIZE, fpin);
        count++;
        sscanf(buf, "%s", keyword);
        
        if(!strcmp(keyname, keyword)) {
            
            sscanf(buf, "%*s %d %*s %s", &ID, temp);
            memset(name, 0, 16);
            memcpy(name, temp+1, strlen(temp)-2 ); // 去掉引号
            
            findOK = true;
            
            if(0==strcmp("LINK", keyname)) {
                allLink = 0;
                allLinkNum++;
                fgets(buf, BUFSIZE, fpin);
                count++;
                sscanf(buf, "%*s %*s %*s %*s %*s %d", &lane);
                printf("在%d行找到了第%d个%s, ID为:%d, 名为:%s ,道数:%d \n", count-1, allLinkNum, keyname, ID, name, lane);
            } 
            fgets(buf, BUFSIZE, fpin);
            count++;
            sscanf(buf, "%s", keyword);
            if(!strcmp("FROM", keyword) && !strcmp("LINK", keyname)) {
                sscanf(buf, "%*s %lf  %lf", &x0, &y0);
                printf("该路从x = %f  y = %f开始\n", x0, y0);
            }     

            allLink++;
        
            
        while(1) {
                
                fgets(buf, BUFSIZE, fpin);
                count++;
                sscanf(buf, "%s", keyword);
                
                if(!strcmp("TO", keyword))
                {
                    if (!strcmp("LINK", keyname))
                    {
                        sscanf(buf, "%*s %lf  %lf", &x1, &y1);
                        printf("到x = %f  y = %f结束\n", x1, y1);
                        
                    }

                    allLink++;
                    
                    printf("第%d个%s一共有%d个点\n\n", allLinkNum, keyname, allLink);
                    
                    break;
                }
    else 
                {
        
        if(!strcmp("OVER", keyword)) {
            char *p = strtok(buf, " ");
            while(p){
                p = strtok(NULL, " ");
                if(p == NULL) break;
                sscanf(p, "%lf", &x1);
                p = strtok(NULL, " ");
                sscanf(p, "%lf", &y1);
                printf("经过x = %f  y = %f\n", x1, y1);
            
                allLink++;

                p = strtok(NULL, " ");  // z
                p = strtok(NULL, " ");
                
                        }
                    }                
                }
            }
        }
    
        else if(!strcmp("--", keyword) && findOK) {
            break;
        
    }
}
}

int main(int argc, char* argv[])
{

    FILE *fpin;

    fpin = fopen("ex3.inp", "r");
    if(fpin == NULL ) {
        printf("打不开文件!\n");
        return -1;
    }

    findPathLINK(fpin, "LINK");
    fclose(fpin);
    
    getchar();
    return 0;
}

加载中
0
店小二的忧伤
店小二的忧伤

    CStdioFile stdiofile;//一般用来写文本文件
    BOOL bOpenFile = stdiofile.Open(mypath,CStdioFile::modeRead);

//解析数据
        CString sRowDara;
        while(stdiofile.ReadString(sRowDara))//ReadString(sRowDara)意味读取一行,然后把字符串赋给strcontents,readstring内部有一个计数器,自动指向下一行
        {
            ResolveRowData(sRowDara);//解析行数据并存入数据库
        }

    if (bOpenFile)
    {
        stdiofile.Close();
    }

返回顶部
顶部