如何读取txt文件中的逐日数据?

chndnk 2007-09-10 03:04:12
现有一记录逐日天气数据的文本文件,其格式为:

年份 月份 1日 2日 3日 28日 29日 30日 31日
----------------------------------
1988 1 12 13 15 …… 15 20 21 22
1988 2 15 16 18 …… 14 32744 32744 32744
……
1988 12 12 13 15 …… 15 20 21 22
(1988为年份,1、2、12为月份,后面从12开始共31列数据,记录逐日气温值,其中2月由于只有28天,后三个用32744表示没有值。以上只是列举了1988两个月的示例,实际上数据从1988至后面某一年如2002等。实际文件中没有横线和上面的文字说明这两行,直接从1988开始。)

现在我想通过在面板上添加一个monthcalendar控件,通过该控件选择日期,就可以在文本框中显示该日的数据。请问该如何实现呢?我尝试了一番没有成功

多谢!
...全文
471 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yejiangang 2007-10-14
  • 打赏
  • 举报
回复
请问你怎么解决的?学习!
chndnk 2007-10-10
  • 打赏
  • 举报
回复
虽然自己后来用别的方法解决了,但还是把分数给vbman2003吧,多谢大家的热心回复
chndnk 2007-10-08
  • 打赏
  • 举报
回复
我已经自己解决了
oo渣渣oo 2007-09-12
  • 打赏
  • 举报
回复
不一定非要用数据库啊!

直接存入DataSet里面,在内存里一样可以用的呀!
晚睡的书虫 2007-09-12
  • 打赏
  • 举报
回复
用正则表达式试试
whb147 2007-09-11
  • 打赏
  • 举报
回复
最快的方法就是导入数据库,嘿嘿
Avoid 2007-09-11
  • 打赏
  • 举报
回复
方法很多

最简单的就是导入数据库,前提是你的数据分隔是规范的。
blueskyworth 2007-09-11
  • 打赏
  • 举报
回复
每个字段的宽度是相同的么?如果是把每行数据分别存入数组中,然后分别匹配。
xiafan 2007-09-11
  • 打赏
  • 举报
回复
我的思路:
在指定日期之后,先得出年月,按READLINE方式读文本,用字符串函数找出是你需要的那个月的那一行,然后用Split存入一个数组里,再按张灯数组的索引值得到你要的那个值。
不知这样可行?
chndnk 2007-09-11
  • 打赏
  • 举报
回复
没有人肯于指点一二吗?
vbman2003 2007-09-11
  • 打赏
  • 举报
回复
直接读文件就是一行行的读,一行行分析,分析过程就是类似以上while语句部分。读取文件的方法有许多,到底用什么方法效率高,对于较大的文件来说很重要,没做过这样的测试......上面有建议导入数据库的方法,你也可以在ACCESS中建立该文本文件的链表,这样就可以直接用SQL语句查询了.......总之,多试试吧
chndnk 2007-09-11
  • 打赏
  • 举报
回复
多谢,试试先,回头再来谢过结帖
vbman2003 2007-09-11
  • 打赏
  • 举报
回复
当数据库来读是不是资源占用少一点?下面是个示例,只是顺着思路写的,如果可以,自己优化

Private Function GetTxt(ByVal d As Date) As String
'用ODBC读 Dbq是存放txt文件的文件夹路径
Dim cn As OdbcConnection = New OdbcConnection("Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\;Extensions=asc,csv,tab,txt;")
Dim cmd As OdbcCommand = New OdbcCommand("select * from test.txt", cn) '指定文件名称
Dim dr As OdbcDataReader

Dim s As String
Dim sValue(33) As String
Dim sLines() As String
Dim itm As Integer = 1

Dim yyyy As String = d.Year.ToString
Dim mm As String = d.Month.ToString
Dim dd As String = d.Day.ToString


cmd.CommandType = CommandType.Text
cn.Open()
dr = cmd.ExecuteReader
While dr.Read()
sLines = dr.GetString(0).Split(Chr(32)) '先按空格分组
For i As Integer = 0 To UBound(sLines)
If sLines(i).Trim <> "" Then
sValue(itm) = sLines(i) '读入数据
itm += 1
End If
Next
'判断获取数据 这是根据你txt的示例,得到的结果
If sValue(1) = yyyy And sValue(2) = mm Then
s = sValue(2 + dd)
cn.Close()
Return s
Exit Function
End If
End While
cn.Close()
s = "没有数据"
Return s
End Function
xiafan 2007-09-11
  • 打赏
  • 举报
回复
如果全存到数组里,会比较大吧?
zhchg6666 2007-09-10
  • 打赏
  • 举报
回复
up

16,555

社区成员

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

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