| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 739 人关注过本帖, 1 人收藏
标题:关于读取TXT文件内容及统计的求助
只看楼主 加入收藏
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
结帖率:70%
收藏(1)
已结贴  问题点数:20 回复次数:10 
关于读取TXT文件内容及统计的求助
请教各位前辈2个问题:
1、TXT文件中如何从某一行开始到文件结束统计各个字符的个数?(我的软件界面已经做了9个文本框,分别显示1~9出现的个数,有多少个就显示几,没有出现的就显示为0),
2、一个txt文件,最大不超过300行,其中某一行会出现SUMMARY:这八个字符。全文件中一定会出现一次,具体行数不固定,请教如何在文本框中显示这一行内容并从第9个字符开始显示。(例如该行内容为SUMMARY:12345,我只希望文本框中显示12345)

请教这两个问题怎么解决?求源码。谢谢各位大大!
搜索更多相关主题的帖子: 文本框 统计 如何 软件 
2013-10-19 03:00
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
1、要看文本是纯英文还是中英文混合,纯英文稍简单些,中英混合则需要定义一个二维数组存储统计结果。
2、假设文本文件为c:\a.txt,完成你所需功能的代码如下:
  Dim a As String, b As String, c() As String
  b = ""
  Open "c:\a.txt" For Input As #1
  While Not EOF(1)
    Line Input #1, a
    c = Split(a, "SUMMARY:")
    If UBound(c) = 1 Then b = b & c(1) & ","
  Wend
  Close #1
  Print b
'结果在字符串变量b中,如有多个则会用逗号隔开,比如我的文件内容如下,运行结果为:4234324,gdfgerg,xxxxxxxxx,

TABLE:  "BRIDGE DESIGN PREFERENCES - JTG-D62-2004"
   Importance="Class II"   FactLim=1
SUMMARY:4234324
TABLE:  "BRIDGE DESIGN PREFERENCES - AASHTOLRFD07"
   HingeOpt="Auto: AASHTO/Caltrans Hinge"

TABLE:  "JOINT COORDINATES"
   Joint=1   CoordSys=GLOBAL   CoordType=Cartesian   XorR=-3   Y=-3   Z=0   SpecialJt=No   GlobalX=-3   GlobalY=-3   GlobalZ=0
   Joint=2   CoordSys=GLOBAL   CoordType=Cartesian   XorR=-3   Y=-3   Z=3   SpecialJt=No   GlobalX=-3   GlobalY=-3   GlobalZ=3
   Joint=3   CoordSys=GLOBAL   CoordType=Cartesian   XorR=-3   Y=3   Z=0   SpecialJt=No   GlobalX=-3   GlobalY=3   GlobalZ=0
   Joint=4   CoordSys=GLOBAL   CoordType=Cartesian   XorR=-3   Y=3   Z=3   SpecialJt=No   GlobalX=-3   GlobalY=3   GlobalZ=3
   Joint=5   CoordSys=GLOBAL   CoordType=Cartesian   XorR=3   Y=-3   Z=0   SpecialJt=No   GlobalX=3   GlobalY=-3   GlobalZ=0
   Joint=6   CoordSys=GLOBAL   CoordType=Cartesian   XorR=3   Y=-3   Z=3   SpecialJt=No   GlobalX=3   GlobalY=-3  
 SUMMARY:gdfgerg
GlobalZ=3
   Joint=7   CoordSys=GLOBAL   CoordType=Cartesian   XorR=3   Y=3   Z=0   SpecialJt=No   GlobalX=3   GlobalY=3   GlobalZ=0
   Joint=8   CoordSys=GLOBAL   CoordType=Cartesian   XorR=3   Y=3   Z=3   SpecialJt=No   GlobalX=3   GlobalY=3                    
 SUMMARY:xxxxxxxxx
GlobalZ=3
2013-10-19 10:41
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
谢谢大大,第二个问题顺利解决!第一个问题的文本详见附件。我是想从//...这行开始到文件的最后,统计出“X”有几个;“1”有几个;“2”有几个;“3”有几个........分别显示在相对应的文本框中,有多少个就显示几,没有出现的就显示为0。
1.rar (1.37 KB)
2013-10-19 20:37
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
这个简单,你需要统计的是数字1-9和字母x,完成对应功能的代码如下:
  Dim a As String, b(9) As Long, c As String, f As Boolean, i As Integer
  For i = 0 To 9
    b(i) = 0       '首先对统计数清零
  Next
  f = False
  Open "c:\1.txt" For Input As #1
  While Not EOF(1)
    Line Input #1, a
    If InStr(a, "//..") > 0 Then f = True                '找到双斜杠的标志,设置变量f为真,准备统计
    If f Then
      For i = 1 To Len(a)
        c = Mid(a, i, 1)
        If Asc(c) > 47 Then b(Val(c)) = b(Val(c)) + 1    '如果是数字或字母x则统计个数,x统计在数组b(0)中,数字1-9则在b(1)-b(9)中
      Next
    End If
  Wend
  Close #1
'统计结果在数组b中,其中b(0)是x的个数,b(1)是1的个数,以此类推。
'对你提供的1.txt统计的结果是x:1170个,1:5639个,5:32个,6:64个,8:70个,9:11个,其他为0
'显示效果你自己解决
2013-10-19 22:45
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
大大!神人啊!叩首中。。。。。。。
恕小的眼拙,给您的文本中还藏有8个A、1个C、3个D.....我没有看出来并告知您,现在一并都计数进b(0)中,不知如何区分开来,请大大再教教我!谢谢!
显示效果我自己可以解决。
2013-10-20 01:34
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:0 
不要太有依赖性,我想基本思路已经给你了,你自己扩充吧,很简单的。
2013-10-20 17:57
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
大大!接触VB不是太多,断断续续的,所以一直没有什么进步,惭愧中。。。。。。
您给的程序我修改了一下,只显示某一个字符(如“A”),可以显示个数。
Dim a As String, b As Long, c As String, f As Boolean, i As Integer
    b = 0       '首先对统计数清零
   f = False
  Open "c:\11.txt" For Input As #1
  While Not EOF(1)
    Line Input #1, a
    If InStr(a, "//..") > 0 Then f = True                '找到双斜杠的标志,设置变量f为真,准备统计
    If f Then
      For i = 1 To Len(a)
        c = Mid(a, i, 1)
        If Asc(c) = 65 Then b = b + 1    '如果是数字或字母x则统计个数,x统计在数组b(0)中,数字1-9则在b(1)-b(9)中
      Next
    End If
  Wend
  Close #1
    Text1.text = b
这时文本框中显示8,是对的。


但是 重新按照我的想法修改:
Dim a As String, b(26) As Long, c As String, f As Boolean, i As Integer
  For i = 1 To 26
    b(i) = 0       '首先对统计数清零
  Next
  f = False
  Open "c:\11.txt" For Input As #1
  While Not EOF(1)
    Line Input #1, a
    If InStr(a, "//..") > 0 Then f = True                '找到双斜杠的标志,设置变量f为真,准备统计
    If f Then
      For i = 1 To Len(a)
        c = Mid(a, i, 1)
        If Asc(c) >= 65  Then b(Val(c)) = b(Val(c)) + 1    '如果是数字或字母x则统计个数,x统计在数组b(0)中,数字1-9则在b(1)-b(9)中
      Next
    End If
  Wend
  Close #1
    Text1.text = b(1)
这时文本框中显示0,就不对了。
请教大大,是Val函数不对么?我改用Str函数也不对。请指教一下吧.



[ 本帖最后由 ictest 于 2013-10-20 22:50 编辑 ]
2013-10-20 22:46
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:10 
  Dim a As String, c As String, f As Boolean, i As Integer
  Dim b(9) As Long        '用于统计数字
  Dim d(25) As Long       '用于统计字母d(0)-d(25)分别对应字母A-Z的统计数
  For i = 0 To 9
    b(i) = 0              '首先对数字统计数清零
  Next
  For i = 0 To 25
    d(i) = 0              '对字母统计数清零
  Next
  f = False
  Open "c:\1.txt" For Input As #1
  While Not EOF(1)
    Line Input #1, a
    If InStr(a, "//..") > 0 Then f = True                '找到双斜杠的标志,设置变量f为真,准备统计
    If f Then
      For i = 1 To Len(a)
        c = UCase(Mid(a, i, 1))                          '逐个取出字符,是字母的统一变成大写字母
        If Asc(c) > 64 And Asc(c) < 91 Then
          d(Asc(c) - 65) = d(Asc(c) - 65) + 1            '如果是字母则统计到数组d中
        Else
          b(Val(c)) = b(Val(c)) + 1                      '数字统计到数组b中
        End If
      Next
    End If
  Wend
  Close #1
2013-10-21 07:01
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:10 
干脆还是用asc码统计吧,不区分数字和字符,因为我发现里面环游#号,这样简单些。代码如下:
  Dim a As String, b(127) As Long, c As String, f As Boolean, i As Integer, j As Integer
  Cls                                                    '清屏
  For i = 0 To 127
    b(i) = 0                                             '对统计数清零
  Next
  f = False
  Open "c:\1.txt" For Input As #1
  While Not EOF(1)
    Line Input #1, a
    If f Then
      For i = 1 To Len(a)
        c = Mid(a, i, 1)                                 '逐个取出字符
        b(Asc(c)) = b(Asc(c)) + 1                        '字符asc码对应的数组b累加
      Next
    End If
    If InStr(a, "//..") > 0 Then f = True                '找到双斜杠的标志,设置变量f为真,准备统计
  Wend
  Close #1
  j = 0
  For i = 0 To 127
    If b(i) > 0 Then
      Print Chr(34) & Chr(i) & Chr(34) & ":" & b(i) & ",  ";
      j = j + 1
      If j Mod 5 = 0 Then Print                          '超过5个换行显示结果
    End If
  Next
  MsgBox "共使用了" & j & "个字符"


[ 本帖最后由 lowxiong 于 2013-10-21 07:32 编辑 ]
2013-10-21 07:27
ictest
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:333
专家分:114
注 册:2010-2-17
收藏
得分:0 
谢谢大大!
2013-10-22 10:01
快速回复:关于读取TXT文件内容及统计的求助
数据加载中...
 
   



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

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