标题:有个关于档案存取的问题
只看楼主
wube
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:23
帖 子:1817
专家分:3681
注 册:2011-3-24
结帖率:98.24%
已结贴  问题点数: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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
帖 子:1817
专家分: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
帖 子:1817
专家分: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册: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
帖 子:1817
专家分: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: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
回复 7楼 wube
先了解一下文件的操作,文件指针的控制。
打开多个文件,同时读写多个文件。
清楚在什么时候读写那个文件的那个数据就可以。
2018-10-15 19:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-490361-1-1.html




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

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