关于filestream读取的问题

caprason 2011-01-18 11:13:04
各位高手,请教:
1,filestream读取TXT是否可以逆向读取?一行一行的逆向读取
2,关于seek的方法,是否能配合readline方法使用?如果不行,应该配合什么方法?
3,filestream.position和seek在msdn上的解释很像,有什么区别吗?

因为我想读一个2万多行的财务TXT文件,所以有了上面的问题,文件结构:
顺序号 账号 金额
科目号 金额累计
分割--------------------
顺序号 账号 金额
科目号 金额累计
分割--------------------
顺序号 账号 金额
科目号 金额累计
每行的长度是一样的,想实现如下功能:
将该TXT中的数据读入ACCESS数据库中,ACCESS结构:
科目号 账号 金额

因为科目号在账号下面,所以想反向读取TXT……
谢谢大家了!
...全文
178 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
caprason 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 net_lover 的回复:]
反向读取,你可以ReadToEnd()全部读取出来,然后再使用Split("\r\n")来分解行,直接读取数组里面的内容就可以了
[/Quote]
不太明白,我先去msdn看看Split("\r\n")的用法,谢谢!
caprason 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
using(FileStream fs = new FileStream(strFile, FileMode.Open, FileAccess.Read))
{
StreamReader sr= new StreamReader(fs);
sr.BaseStream.Seek(0, SeekOrigin.Begin);
string strLine = sr.ReadLine();
wh……
[/Quote]
这位老大,你写的我看不太懂,前面那些能理解,指定流的开始位置,然后读取
后面这段什么意思啊?这个:
List<String> lst=new List<string>(File.ReadAllLines(""));
for(int i=lst.Count-1;i>=0;i--)
{
//lst[i]
}

还有就是SeekOrigin是使用position定位的,那么这个position的单位是什么?
字节?位数?长度?
孟子E章 2011-01-19
  • 打赏
  • 举报
回复
反向读取,你可以ReadToEnd()全部读取出来,然后再使用Split("\r\n")来分解行,直接读取数组里面的内容就可以了
caprason 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 findcaiyzh 的回复:]
如果只是“因为科目号在账号下面” 不用反着读了
每次将下面两行读取出来处理

顺序号 账号 金额
科目号 金额累计


然后忽略
分割--------------------

再读取两行,再处理。
[/Quote]
谢谢这位大哥的回复
因为科目号上面的行数是不固定的,所以不能这样处理

其实最好能指定读取第几行
KissXYL 2011-01-19
  • 打赏
  • 举报
回复
首先 ,默认是没有逆向读取的方法的,你可以考虑自己实现一个方法,效率么,也不会慢多少,倒着读文件。不过这样做的的确很少。
你大可顺序读取,导入access,最前面加一个id,顺序增加,然后读取表的时候,逆序id排序后读取。
宝_爸 2011-01-19
  • 打赏
  • 举报
回复
如果只是“因为科目号在账号下面” 不用反着读了
每次将下面两行读取出来处理

顺序号 账号 金额
科目号 金额累计


然后忽略
分割--------------------

再读取两行,再处理。
caprason 2011-01-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 net_lover 的回复:]
反向读取,你可以ReadToEnd()全部读取出来,然后再使用Split("\r\n")来分解行,直接读取数组里面的内容就可以了
[/Quote]
如果使用split分解行的话,那我是不是可以这样做:
1,readtoend()全部读取出来
2,用分割行作为split的char来分解,这样第一次分割完成后就能每个科目号一个string了
3,再次分割

这样做的话是不是很占用内存和CPU呢?
2万多行的TXT,内容大约6MB
wuyq11 2011-01-18
  • 打赏
  • 举报
回复
using(FileStream fs = new FileStream(strFile, FileMode.Open, FileAccess.Read))
{
StreamReader sr= new StreamReader(fs);
sr.BaseStream.Seek(0, SeekOrigin.Begin);
string strLine = sr.ReadLine();
while (strLine != null)
{
strLine = sr.ReadLine();
}
sr.Close();
}

List<String> lst=new List<string>(File.ReadAllLines(""));
for(int i=lst.Count-1;i>=0;i--)
{
//lst[i]
}
Position获取当前位置
设置位置读取就要Seek方法配合 SeekOrigin 枚举

16,549

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧