| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3243 人关注过本帖, 1 人收藏
标题:CSV合并的问题
取消只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏(1)
已结贴  问题点数:20 回复次数:32 
CSV合并的问题
这样写每次都只读取第一行的资料,要怎么改才能将多个CSV档案合并成一个?
假设有300个CSV档,每个档案有1000多行,要合并成一个.
0000.csv ... 0300.csv => AAA.csv
程序代码:
void MergeCSV(int fl,char *Tmp, char *TmpFileNameStr1,int TC)
{
    FILE *stream2,*stream3;
    int i=0,j=0;
    char TempString[Max_Size]={0},temp[Max_Size]={0};

    stream2 = fopen(TmpFileNameStr1, "a+" );
    for (i=0;i<(TC+6);i++)
    {
        for (j=0;j<fl;j++)
        {
            sprintf(TempString,"%s%04d.csv",Tmp,j);
            stream3 = fopen( TempString, "r" );
                if (fgets(temp, Max_Size, stream3)!=NULL)
                {
                    int ii=strlen(temp);
                    temp[ii-1]='\0';
                    fprintf(stream2,"%s",temp);
                }
            fclose(stream3);
            memset(TempString,0,sizeof(TempString));
            memset(temp,0,sizeof(temp));
            fflush(stream2);
        }
        fprintf(stream2,"\n");
    }
    fclose(stream2);
}


P.S 资料量很大,无法一次全部读入内存中.

[ 本帖最后由 wube 于 2015-3-9 12:23 编辑 ]
搜索更多相关主题的帖子: 资料 
2015-03-09 12:19
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
數據文檔...
111.rar (1.15 MB)

不要選我當版主
2015-03-09 13:07
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
在VB版问的只是确认一下是否一定要另外编程来实现而已
实际上执行当然不可能用VB来写
因未考虑到也许要连续开关档300*1000次,怕VB可能会无法负荷

不要選我當版主
2015-03-09 13:12
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
回复 11楼 TonyDeng
全部依序由左往右接,长度全部固定,宽度不一定

不要選我當版主
2015-03-09 13:15
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
最后变成类似这样的CSV档...
https://bbs.bccn.net/thread-441645-1-1.html

不要選我當版主
2015-03-09 13:17
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
全部285个档案的第一行都接在一起,
第二行接在一起
.....
直到最后一行
最后变成一个CSV档

不要選我當版主
2015-03-09 13:20
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
字段的分佈次序和文檔的記錄數不一致
看不懂这句是什么意思...

不要選我當版主
2015-03-09 14:29
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
基本上跟这篇类似需求,只是他是两个合并,我是要285个合并.
http://bbs.

不要選我當版主
2015-03-09 14:38
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
土法炼钢搞定了,但是新的问题来了,要怎么动态声明指针阵列?
同时开启285个档案,速度上还免强能够接受,只是若是同时开启1000个档案,不知道会不会有什么异状.
程序代码:
void MergeCSV(int fl,char *Tmp, char *TmpFileNameStr1,int TC)
{
    FILE *stream2,*stream3[300];    //这个地方300怎么改成动态声明?
    int i=0,j=0;
    char TempString[Max_Size]={0},temp[Max_Size]={0};

    stream2 = fopen(TmpFileNameStr1, "a+" );
    for (j=0;j<fl;j++)
    {
        sprintf(TempString,"%s%04d.csv",Tmp,j);
        stream3[j] = fopen( TempString, "r" );
        memset(TempString,0,sizeof(TempString));
    }
    for (i=0;i<(TC+6);i++)
    {
        for (j=0;j<fl;j++)
        {
            if (fgets(temp, Max_Size, stream3[j])!=NULL)
            {
                int ii=strlen(temp);
                temp[ii-1]='\0';
                fprintf(stream2,"%s",temp);
            }
            memset(temp,0,sizeof(temp));
            fflush(stream2);
        }
        fprintf(stream2,"\n");
    }
    for (j=0;j<fl;j++)
        fclose(stream3[j]);

    fclose(stream2);
}

不要選我當版主
2015-03-09 15:45
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
之前给的压缩档第0000档案有点问题,改过了.
再加上最后合并完成的AAAA.
123.rar (2.01 MB)

不要選我當版主
2015-03-09 16:19
快速回复:CSV合并的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020698 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved