首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

集思广益,算法思想讨论!该如何解决

2012-02-28 
集思广益,算法思想讨论!有一个很大的文件(大的可以到几十M):有序地存储着如:YOfRow1(BytesPerLine)MofRow1

集思广益,算法思想讨论!
有一个很大的文件(大的可以到几十M): 
有序地存储着如: 
Y Of Row1 (BytesPerLine)  
M of Row1 (BytesPerLine)  
C of Row1 (BytesPerLine)  
K of Row1 (BytesPerLine)  

Y Of Row2 (BytesPerLine)  
M of Row2 (BytesPerLine)  
C of Row2 (BytesPerLine)  
K of Row2 (BytesPerLine)  
......  
Y Of RowN (BytesPerLine)  
M of RowN (BytesPerLine)  
C of RowN (BytesPerLine)  
K of RowN (BytesPerLine)  
其中Y ,M,C,K分别表示同类数据,(Y,M,C,K)的行数相同。 

现在要对文件的存储数据进行调整: 
所有M类数据要向下移动H行,前面的H行填0;C类数据向下移动2H行,前面2H行填0;K类数据向下移动3H行,前面的3H行填0。 
如下: 

Y Of Row1 (BytesPerLine)  
000000000 (BytesPerLine)  
000000000 (BytesPerLine)  
000000000 (BytesPerLine)  
........ 
Y Of Rowi (BytesPerLine)  
M of Rowi-H (BytesPerLine)  
C of Rowi-2H (BytesPerLine)  
K of Rowi-3H (BytesPerLine)  

..... 
000000000 (BytesPerLine)  
000000000 (BytesPerLine)  
000000000 (BytesPerLine)  
K of RowN (BytesPerLine) 

将调整后的结果保存到新的文件中。 

提示:文件数据量很大,希望打开并遍历读取文件数据的次数尽可能少(节约时间)。 

仁者见仁,智者见智。有好的想好大家讨论讨论。 
谢谢!

[解决办法]

C/C++ code
所有M类数据要向下移动H行,前面的H行填0;C类数据向下移动2H行,前面2H行填0;K类数据向下移动3H行,前面的3H行填0。------------------读出源文件中的内容写到新的文件中去,碰完Y类数据,下面填充H行0,继续读取,碰到M类数据,下面填充2H行0,以此类推,就是边写变处理,不过新的文件貌似得足够的大,
[解决办法]

一行一行读取旧文件,每读取一行,就往新文件写一行,

往新文件些之前先判断此行之前应该添加的 00000行数目

并向新文件写如这些 0000行,如此下去


对于几10m的文件应该没问题
[解决办法]
才几十M的文件,根本就是毛毛雨,哪称得上大。
一次全读入内存后,想咋搞咋搞,然后一次全写回去。
[解决办法]
用队列来实现,YMCK各一个队列,应该很容易,但不知道效率如何
[解决办法]
一次性读到内存,不行吗?或者是内存使用有限制?
[解决办法]
貌似几十M的文件可以直接载入内存。
再大了不妨考虑内存映射文件,每次view一块,处理完毕,view下一块。

热点排行