| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1442 人关注过本帖
标题:请老师帮我看看读取txt数据,并绘图的问题
只看楼主 加入收藏
雨初飞雪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-5-21
结帖率:0
收藏
已结贴  问题点数:10 回复次数:7 
请老师帮我看看读取txt数据,并绘图的问题
我的需求是 vb按行读取txt文件中的数据。
如txt中数据的格式是
 70            226           0.0006825   
 84            315           0.0006825   
 403           2347          0.0006825   
 688           4156          0.0006825   
vb分别读取每一行,然后将各行中的数据分别分配给对应的变量:
  
  第一行 x=70  y=226  h= 0.0006825   
        。。。        ...
  第四行 x=688      y=4156   h=0.0006825   
同时将x,y,h存入一个数组xyh_arry()中。这里数组的大小要根据txt文件的行数确定,好像是动态数组吧。
我写的程序:
  Dim TextLine
  Dim xxx As Single
  Dim yyy As Single
  Dim hhh As Single
  Dim arry_num As Long
  Dim strFileName As String '文件名
  strFileName = App.Path & "\" & Text1.Text & ".TXT"
  List1.AddItem (App.Path & "\" & Text1.Text & ".TXT")

  Open strFileName For Input As #1                  '读取txt文本
      
      '************测得txt文本行数
      Dim s As String
      Do Until EOF(1)   ' 循环至文件尾
        arry_num = arry_num + 1
        Input #1, s
      Loop
      
      Dim xyh_arry() As Single   
      ReDim xyh_arry(0 To 2, 0 To arry_num - 1) As Single
      Do Until EOF(1)    ' 循环至文件尾
         Line Input #1, TextLine   ' 读入一行数据并将其赋予某变量
         xxx = ????               '按位取x坐标            
         yyy = ????               '按位取y坐标
         hhh = ????               '按位取厚度值
                  
         xyh_arry(0, k) = xxx
         xyh_arry(1, k) = yyy
         xyh_arry(2, k) = hhh
         k = k + 1
       Loop
  Close #1


程序中红色部分,没有思路们不会写,请老师指教,并请帮我检查我这段程序还有别的问题吗?
搜索更多相关主题的帖子: 老师 
2010-12-23 01:10
Artless
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:4211
专家分:28888
注 册:2009-4-8
收藏
得分:3 
间隔符是什么?

无知
2010-12-23 01:58
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:3 
需先要定义二个变量,如
dim o as long
dim fj()

'接你红色部分
TextLine =Replace (Replace ,vbtab," ")        '把 TAB 换成 空格
do
   o=len(textline)
   TextLine =Replace (Replace ,"  "," ")        '把 双空格 换成 单空格   
loop while o<>len(textline)
fj=split(textline," ")                          '以 单空格 为分隔符
if ubound(fj)>=2 then                             '存在三个或以上元素,超出问题不使用
         xxx = val(fj(0))               '按位取x坐标            
         yyy = val(fj(1))               '按位取y坐标
         hhh = val(fj(2))               '按位取厚度值
else
     '数据不够,在这里处理,如果你是有几个数,就读几个数,那么这里需要分解开来写
end if
'-----读值结束-----


  

授人于鱼,不如授人于渔
早已停用QQ了
2010-12-23 10:02
雨初飞雪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-5-21
收藏
得分:0 
下面是我往txt中写数据的程序,新手,我觉得应该是用空格分开的吧
Private Sub Command1_Click()
 Dim response As Integer
 Dim strFileName As String '文件名
 
 strFileName = App.Path & "\" & Text1.Text & ".TXT"
 List1.AddItem (App.Path & "\" & Text1.Text & ".TXT")
 
 
 If Dir(App.Path & "\" & Text1.Text & ".TXT") = vbNullString Then
      Open strFileName For Append As #1
      For i = 0 To num - 1
          Print #1, arry(0, i), arry(1, i), h_arry(i), vbCrLf;
      Next i
      response = MsgBox("数据保存成功", vbOKOnly, "保存")
      Close #1
      Form1.Show
      'Me.Hide
Else
      MsgBox "命名重复,请重新命名!"
End If
 
End Sub


[ 本帖最后由 雨初飞雪 于 2010-12-23 11:11 编辑 ]
2010-12-23 10:56
雨初飞雪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-5-21
收藏
得分:0 
风吹过b老师,
1、TextLine =Replace (Replace ,"  "," ")        '把 双空格 换成 单空格    这句里,replace参数是什么啊,我没懂,是TextLine吗

2、TextLine = Replace(Replace , vbTab, " ")       '把 TAB 换成 空格
还有这里的tab又是什么呢?txt中哪里出现tab了,为什么要替换?

3、我为了想看到这里计算的数据
         If UBound(fj) >= 2 Then                           '存在三个或以上元素,超出问题不使用
           xxx = Val(fj(0))               '按位取x坐标
           yyy = Val(fj(1))               '按位取y坐标
           hhh = Val(fj(2))               '按位取厚度值

        'Else
              '数据不够,在这里处理,如果你是有几个数,就读几个数,那么这里需要分解开来写
        End If
         List1.AddItem (xxx)
         List1.AddItem (yyy)
         List1.AddItem (hhh)            
加了红色的部分后,为什么list中显示不出来呢
谢谢老师!

[ 本帖最后由 雨初飞雪 于 2010-12-23 11:44 编辑 ]
2010-12-23 11:25
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
回6楼:
1、Replace (Replace ,"  "," ")         是TextLine吗,临时打了,所以忘了写快了。
2、 VbTab 是一个常量。这命令是防止你生成时用 TAB 来分隔数据而进行的容错处理。

3、
按命令来看,是没错。
         List1.AddItem xxx
不要加括号。
我现在没办法给你测试。你可以在 end if 后设置断点 ,
然后看看当前各个变量的值来判断程序执行情况。




授人于鱼,不如授人于渔
早已停用QQ了
2010-12-23 18:11
雨初飞雪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-5-21
收藏
得分:0 
老师 我这里还是有问题,运行到红色一行的时候 错误提示“除数为零”。
我要完成的功能是,1、入txt中的每行数据,txt中每行数据中,分别表示x,y坐标,及一个对应值
                  2、在picture中绘制出所有对应的坐标点
我后面画图那块好像是有点问题。

我将我这段程序都贴出来,请您指教
 xxx As Single
  Dim yyy As Single
  Dim hhh As Single
  Dim xy_max As Single
  
  Dim k As Long
  Dim arry_num As Long
  Dim strFileName As String '文件名
  strFileName = App.Path & "\" & Text1.Text & ".TXT"
  List1.AddItem (App.Path & "\" & Text1.Text & ".TXT")

  If Dir(App.Path & "\" & Text1.Text & ".TXT") = vbNullString Then
      MsgBox "您选择的数据不存在!,请重新选择"
  Else
      Open strFileName For Input As #1                  '读取txt文本
      
      '************测得txt文本行数
      Dim s As String
      Do Until EOF(1)   ' 循环至文件尾
        arry_num = arry_num + 1
        Input #1, s
      Loop
      List1.AddItem (arry_num)
      
      
      Dim xyh_arry() As Single   '如果能查询txt文件有多少行
      ReDim xyh_arry(0 To 2, 0 To arry_num - 1) As Single
      
      
      Do Until EOF(1)    ' 循环至文件尾
         Line Input #1, TextLine   ' 读入一行数据并将其赋予某变量
         'xxx = Val(Mid(TextLine, 1, 13))      '按位取x坐标
         'yyy = Val(Mid(TextLine, 14, 13))      '按位取y坐标
         'hhh = Val(Mid(TextLine, 27, 13))       '按位取厚度值
         
         
         Dim o As Long
         Dim fj()

         '接你红色部分
        TextLine = Replace(TextLine, vbTab, " ")       '把 TAB 换成 空格
        Do
          o = Len(TextLine)
          TextLine = Replace(TextLine, "  ", " ")       '把 双空格 换成 单空格
        Loop While o <> Len(TextLine)
        
        fj = Split(TextLine, " ")                       '以 单空格 为分隔符
        If UBound(fj) >= 2 Then                           '存在三个或以上元素,超出问题不使用
           xxx = Val(fj(0))               '按位取x坐标
           yyy = Val(fj(1))               '按位取y坐标
           hhh = Val(fj(2))               '按位取厚度值

        'Else
              '数据不够,在这里处理,如果你是有几个数,就读几个数,那么这里需要分解开来写
        End If

         Stop
         List1.AddItem xxx
         List1.AddItem yyy
         List1.AddItem hhh
         
         If xxx >= yyy Then                      '计算x,y坐标最大值
            If xxx >= xy_max Then
               xy_max = xxx
            End If
          Else
            If yyy >= xy_max Then
               xy_max = yyy
            End If
         End If
         
         
         xyh_arry(0, k) = xxx
         xyh_arry(1, k) = yyy
         xyh_arry(2, k) = hhh
         
         List1.AddItem (xyh_arry(0, k))
         List1.AddItem (xyh_arry(1, k))
         List1.AddItem (xyh_arry(2, k))
         k = k + 1
       Loop
       Close #1
       '***************绘图初始化********************
      Dim surface_width As Integer
      Dim surface_height As Integer
      Dim surface_count As Integer
   
      If (xxx >= yyy) Then
        surface_width = xy_max * 5
        surface_height = xy_max * 5
        surface_count = xy_max * 5
      Else
        surface_width = xy_max * 5
        surface_height = xy_max * 5
        surface_count = xy_max * 5
      End If
      
   
    P.ForeColor = vbRed
    P.DrawWidth = 1
    P.ScaleMode = 0
    P.Scale (0, surface_count)-(surface_count, 0) '设定坐标尺度
   
    If (surface_width >= surface_height) Then
         P.Line (0, surface_height)-(surface_width - 1, surface_height), vbBlue '横线
         P.Line -(surface_width - 1, 1), vbBlue
         P.Line -(0, 1), vbBlue
         P.Line -(0, surface_height), vbBlue
    Else
         P.Line (surface_width, 0)-(surface_width, surface_height), vbBlue  '横线
         P.Line -(0, surface_height), vbBlue
         P.Line -(0, 1), vbBlue
         P.Line -(surface_width, 1), vbBlue
    End If
   
    P.CurrentX = surface_width / 30  '设置 原点 O POINT 的位置
    P.CurrentY = surface_height / 30
    P.Print "0"
    P.DrawWidth = 5
   
     For k = 0 To arry_num - 1
          P.PSet (xyh_arry(0, k), arry(1, k))
          List1.AddItem (arry(0, k) & "," & arry(1, k))
     Next k
     
End If

End Sub
2010-12-23 21:08
ash292340644
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:8
专家分:4
注 册:2010-9-28
收藏
得分:3 
我完全看不懂啊
2010-12-24 14:40
快速回复:请老师帮我看看读取txt数据,并绘图的问题
数据加载中...
 
   



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

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