注册 登录
编程论坛 VB6论坛

求版主帮忙,还是读取数据的问题

lovechang198 发布于 2013-07-31 21:50, 974 次点击
现在我有一个tser数据,我编写了如下代码
Open "C:\Users\DELL\Desktop\001.tser" For Input As #1
  Do While Not EOF(1)
    ReDim s1(i)
    Line Input #1, s
    s1(i) = s
'  Print s1(i)
    i = i + 1
  Loop
  While InStr(s, "  ") '空格处理
    s = Replace(s, "  ", " ")
    Wend
 '   Print s
Close #1
   s1 = Split(s, vbCrLf)
  Print UBound(s1)
这里print 输出的 ubound(s1)为0
这是为什么呢,大神帮我看看,我主要就是想能够把这个s分行就可以
这是附件数据
只有本站会员才能查看附件,请 登录
12 回复
#2
lovechang1982013-07-31 21:54
在补充一下,就是要很多次要读入这样的数据,我是不是需要建立一个function函数来做或者是添加成模块呢
其次vb中批处理怎么做啊?
问题比较多,希望有一位好心人帮助做我的师傅谢谢了

[ 本帖最后由 lovechang198 于 2013-7-31 21:57 编辑 ]
#3
lowxiong2013-07-31 23:10
通过分析,你的文件中已经包含换行符(asc码10),获取所需数据的代码如下:
Dim s1() As String, s As Byte, b As String, i As Integer
Open "C:\001.tser" For Binary As #1
  b = ""
  Do While Not EOF(1)
    Get #1, , s         '读入一个字节
    b = b & Chr(s)      '转换为字符
  Loop
Close #1
s1 = Split(b, Chr(10))  '以换行符分解为数组
For i = 0 To UBound(s1)
  Do
    b = s1(i)
    s1(i) = Replace(s1(i), "  ", " ")  '对数组所有元素消空格
  Loop Until s1(i) = b
  Print s1(i)
Next
#4
lowxiong2013-07-31 23:14
最接近你的代码也可以完成所需功能,如下:
Dim s1() As String, s As String, b As String, i As Integer
Open "C:\Users\DELL\Desktop\001.tser" For Input As #1
  b = ""
  Do While Not EOF(1)
    Line Input #1, s       '读入一行数据,实际只有一行就全部读入
    b = b & s              '叠加所有行数据
  Loop
Close #1
s1 = Split(b, Chr(10))  '以换行符分解为数组
For i = 0 To UBound(s1)
  Do
    b = s1(i)
    s1(i) = Replace(s1(i), "  ", " ")  '对数组所有元素消空格
  Loop Until s1(i) = b
  Print s1(i)
Next
#5
风吹过b2013-08-01 08:26
ReDim s1(i)                  重定义数组大小,会导致数组内容被清空
    Line Input #1, s             读一行,会自动省略 vbcrlf
    s1(i) = s                    把刚读的数据放到数组的最后一个元素里
然后你又是在循环里读。
得到的结果是,
s 是最后一个行的内容,不包含 vbcrlf
s1() ,总元素个数是行数,但内容只包含最后一行的内容。

---------------
  While InStr(s, "  ") '空格处理
    s = Replace(s, "  ", " ")
    Wend

这里,根据上面的内容,你也只能 最后一行进行了处理。

------------
   s1 = Split(s, vbCrLf)
  Print UBound(s1)
又重置了 S1 。用最后一行按 VBCRLF 进行分解,因为最后一行不包含空上字符,所以只有一个元素。
#6
lovechang1982013-08-01 09:35
回复 5楼 风吹过b
如果这样的话那s应该只有最后一行的内容
但是我print s时整个文件的字符都有是怎么回事呢?
#7
lovechang1982013-08-01 09:38
回复 2楼 lovechang198
谢谢您,给的代码可以完成。
#8
风吹过b2013-08-01 10:36
'  Print s1(i)

这句是在循环里执行,每次都把每行的读到的数据显示出来,显示后又自动换行。
那自然是整个文件的内容啊。

你显示了内容后,又把这个内容给丢掉了,所以后面处理时,就没内容了。
#9
lovechang1982013-08-01 15:33
回复 8楼 风吹过b
怪不得这样呢,谢谢你,感觉这个论坛充满爱啊
#10
lovechang1982013-08-01 16:02
回复 8楼 风吹过b
还有一个问题就是这个帖子里面2楼我说的。
我有很多次要读取这种数据,而且最后要得到的数据基本都是数组,这样做一个function函数或者过程是不是比较好呢
另外批处理是怎么回事,是不是我可以把所有的读入数据的过程全部交给批处理来做?
#11
风吹过b2013-08-01 17:20
建议写成一个 function 函数,采取 传递文件,和 按地址传递数组的形式 。

什么批处理 ?  
按我们一般的理解,批处理,就是一次性提交多个任务给系统运算,然后一次性返回结果,被称为批处理,
在 DOS/WINDOWS OS 里,批处理是指把一系列需要执行的命令写到一个文件里,一次调用后,系统自动执行这一批命令。
#12
lovechang1982013-08-04 08:30
回复 11楼 风吹过b
关于这个function我不是很理解,能不能举个简单的例子,让它能够实现这个功能
比如我桌面有001到004四个文件,都要输出为数组?该怎么弄代码呢?
想了很久这个文件可以用自变量i来代替,可是怎么要做到输出数组呢
function array(i as integer) as single
.....
end function
for i =1 to 4
array(i)
s()=array(i)
next i

这样最后能得到我想要的数组么?
#13
lovechang1982013-08-04 09:03
回复 4楼 lowxiong
大神,我想要多次读取这种数据,我不会做这样的代码,比如这是130730
那下次就是130731这样的形式,能不能帮我写一个函数,只要把时间传递给函数
就能得到相应的数据数组?
1