| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2228 人关注过本帖
标题:有个关于档案存取的问题
只看楼主 加入收藏
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
结帖率:97.66%
收藏
已结贴  问题点数:20 回复次数:7 
有个关于档案存取的问题
若我有两个ASCII档案,举例两个档案都有10万行每行都有1000个字,
而我读第一个档案的第一行,必须去对照第二个档案的第一行,
我要怎么写才可以每次都是1对1,而不要变成

读档案1->读档案2
行1->行1
行2->1+2
...
10萬->1+....+10萬

加上每行每个字都要处理,效率会很差,
不知道这样表达行不行?

因为不是二进制档无法用seek()移动位置

[此贴子已经被作者于2018-10-13 19:14编辑过]

搜索更多相关主题的帖子: 档案 存取 每行 一行 seek 
2018-10-13 19:12
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
给文件看看(随便几行)
2018-10-13 20:15
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:5 
开两个fstream对象,放在同一个for循环里面分别同步读取两个文件可不可行呢?不过我不是很确信我把你的要求读懂了。
2018-10-13 23:00
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用yangfrancis在2018-10-13 23:00:15的发言:

开两个fstream对象,放在同一个for循环里面分别同步读取两个文件可不可行呢?不过我不是很确信我把你的要求读懂了。


1.用FOR表示要先知道档案总行数,我是用While
2.同时开2档案之前用VB试,他会先跑里面的,所以两个档读完会变成10万*10万次,这就是我要避免的情况
while(fgets(Temp, 20480, stream)!=NULL)
{
    while(fgets(Temp1, 20480, stream1)!=NULL)
    {
        ....
    }
    fclose(stream1);
}
fclose(stream);

不要選我當版主
2018-10-15 11:10
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
以下是引用吹水佬在2018-10-13 20:15:40的发言:

给文件看看(随便几行)


这是关于半导体测试的资料分析,光给范例可能会一头雾水,稍微说一下

1.log(一份32000行*N份)(32000=硬体内存一次输出最大量资料)
Use->0~1023通道依序排列有用到的硬体通道为1

0=->0~1023通道依序排列有错误的硬体通道为非0
....
32000=->0~1023通道依序排列有错误的硬体通道为非0

2.log(一份32000行*N)
排列有用到的軟体通道名称(軟体通道名称)
_
排列有用到的硬体通道号码(与軟体通道名称对应)(硬体通道号码1)

XXXXXXXXXXXXXXXXXXXXXXXXXXLXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXH(根据1.log的硬体通道号码取出错误的符号)

3.log
0=PIN0000,2,832,1,192,129,False,False,False,False
(index=軟体通道名称,Type,硬体通道号码1,硬体通道号码2,硬体通道号码3,硬体通道号码4,(后面在此case无用忽略...)
(2.log档案仅显示硬体通道号码1,但需从1对照3推算2)=>最后得出各軟体通道名称+硬体通道号码的错误的符号

应该不容易看懂,重点是1.log和2.log的资料对照效率问题,其他不懂没差
1.rar (1.66 KB)



我无意中才发现我变VB版主了,1票也能当

[此贴子已经被作者于2018-10-15 12:09编辑过]


不要選我當版主
2018-10-15 12:05
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:15 
以下是引用wube在2018-10-15 11:10:08的发言:



1.用FOR表示要先知道档案总行数,我是用While
2.同时开2档案之前用VB试,他会先跑里面的,所以两个档读完会变成10万*10万次,这就是我要避免的情况
while(fgets(Temp, 20480, stream)!=NULL)
{
    while(fgets(Temp1, 20480, stream1)!=NULL)
    {
        ....
    }
    fclose(stream1);
}
fclose(stream);

一行对一行的不用二层循环
while ((fgets(Temp,20480,stream)!=NULL) && (fgets(Temp1,20480,stream1)!=NULL))
{
    ....
}
fclose(stream);
fclose(stream1);

2018-10-15 14:30
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1820
专家分:3681
注 册:2011-3-24
收藏
得分:0 
原来C可以同时开档,那依此要领能同时开多个档,
不过要是两个档案不同大小?如我上面写的,
数个1.log = 一个2.log行数时,
虽然可以用break;跳出回圈,但下次?

stream1 = fopen( FileN, "r" );
for(i=0;i<5;i++)//举例有5个档案
{
    stream = fopen( A[i], "r" );
    while ((fgets(Temp,20480,stream)!=NULL) && (fgets(Temp1,20480,stream1)!=NULL))
    {
        ....
        if(...)
            break;//能否指定只要跳出stream的while?而stream1继续?
    }
    fclose(stream);
}
fclose(stream1);

不要選我當版主
2018-10-15 17:13
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
回复 7楼 wube
先了解一下文件的操作,文件指针的控制。
打开多个文件,同时读写多个文件。
清楚在什么时候读写那个文件的那个数据就可以。
2018-10-15 19:51
快速回复:有个关于档案存取的问题
数据加载中...
 
   



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

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