G**Y 发帖数: 33224 | 1 比如一个文件有1000000行,
很大很多行,
可能一下装不到内存里,
现在要把行重排,
新行序是知道的,
怎么作最有效呀。
C的文件是不是只能顺序读呀?
那不是一个文件要打开关闭很多次?
如果是perl,会不会好些。
我可以把想要的行序写到一个文件里。 |
E*V 发帖数: 17544 | 2 ft
you fopen a file does not mean you load the whole part into memory
i suggest you read apue
【在 G**Y 的大作中提到】 : 比如一个文件有1000000行, : 很大很多行, : 可能一下装不到内存里, : 现在要把行重排, : 新行序是知道的, : 怎么作最有效呀。 : C的文件是不是只能顺序读呀? : 那不是一个文件要打开关闭很多次? : 如果是perl,会不会好些。 : 我可以把想要的行序写到一个文件里。
|
G**Y 发帖数: 33224 | 3 但是C文件是顺序读取的,
比如我要把文件按这个顺序重排
1
1001
2001
。。。
2
1002
2002
。。。
还是很麻烦呀,
C似乎不能直接读指定行,
必须用loop跳过?
【在 E*V 的大作中提到】 : ft : you fopen a file does not mean you load the whole part into memory : i suggest you read apue
|
N****w 发帖数: 21578 | 4 你转行学 CS 的?
【在 G**Y 的大作中提到】 : 但是C文件是顺序读取的, : 比如我要把文件按这个顺序重排 : 1 : 1001 : 2001 : 。。。 : 2 : 1002 : 2002 : 。。。
|
G**Y 发帖数: 33224 | 5 似乎要
fseek + byte-address index?
这样就可以随便读取任意行了?
【在 G**Y 的大作中提到】 : 但是C文件是顺序读取的, : 比如我要把文件按这个顺序重排 : 1 : 1001 : 2001 : 。。。 : 2 : 1002 : 2002 : 。。。
|
N****w 发帖数: 21578 | 6 fgets 吧
就看读进来的你怎么处理
【在 G**Y 的大作中提到】 : 似乎要 : fseek + byte-address index? : 这样就可以随便读取任意行了?
|
G**Y 发帖数: 33224 | 7 我是自学CS的。呵呵。
C的文件操作似乎确实很弱。
【在 N****w 的大作中提到】 : 你转行学 CS 的?
|
N****w 发帖数: 21578 | 8 找个教程看几章。。。
【在 G**Y 的大作中提到】 : 我是自学CS的。呵呵。 : C的文件操作似乎确实很弱。
|
G**Y 发帖数: 33224 | 9 几百兆的文件,也fgets?
不过对进来还是得search,match啥的。
【在 N****w 的大作中提到】 : fgets 吧 : 就看读进来的你怎么处理
|
N****w 发帖数: 21578 | 10 那就随便你怎么搞了
不想都放内存里,就读两遍吧
第一遍把每行在什么位置、长度记下来,也可以不用读,光用 fscanf 找行尾
再读一遍的时候,算出每行该写到目标文件的什么位置,写之
【在 G**Y 的大作中提到】 : 几百兆的文件,也fgets? : 不过对进来还是得search,match啥的。
|
E*V 发帖数: 17544 | 11 I strongly suggest that you read some book
regarding C
【在 G**Y 的大作中提到】 : 几百兆的文件,也fgets? : 不过对进来还是得search,match啥的。
|