我正在尝试读取由以下格式的文本行组成的文件...
first value 1352.2 second value 12 third value 32323
first value 1233.2 second value 22 third value 23333
first value 1233.1 second value 21 third value 64344
所以我正在寻找一个与fscanf或sscanf类似的功能,一次性咀嚼每一行。是否有这样的功能,或者我必须手动分开每一行(有几种不同的行)。
答案 0 :(得分:5)
没有等同于sscanf
。我会用Mid()手动分开线。这很容易。
Mid(string, start, length)
将返回一个子字符串,从字符start
开始,length
个字符长。
start
从1开始 - 字符串中的第一个字符是数字1. start
和length
。如果文件包含非常大的数字,该文件会是什么样的?可能数字会进一步向左延伸(如果数字在文件中右对齐,这在我的经验中很常见 - 您的里程可能会有所不同)。Val
将子字符串转换为数字
就个人而言,我会避免Input #。 Input #
用于使用Write #
读取从VB6编写的文件。如果您尝试使用Input #
读取任意文件格式,则可能会遇到奇数边缘情况。
答案 1 :(得分:2)
虽然MarkJ已经为您提供了VB6的处理方式,但您可能需要查看FWIW:
http://www.freevbcode.com/ShowCode.asp?ID=3806
“C字符串函数SScanf和StrTok在VB中实现”
它实现了一个函数ScanString(),它应该是对sscanf()的仿真。
答案 2 :(得分:2)
给定这样的文件,你可以使用你喜欢的任何方法逐行读取文件,然后使用Trim
和Split
函数创建一个空格分隔字符串的字符串数组每一行。然后通过保留那些从True
函数返回IsNumeric
的元素来解析结果数组中的数字:
将它放在即时窗口中,看看它是如何工作的:
s = Split(Trim("first value 1352.2 second value 12 third value 32323"))
For x = LBound(s) To UBound(s): _
? "'", x, s(x), IsNumeric(s(x)): _
Next x
当您在Next x
之后按Enter键时,您会看到这一点,其中每个数字后跟一个“True”:
' 0 first False
' 1 value False
' 2 1352.2 True
' 3 False
' 4 False
' 5 False
' 6 False
' 7 False
' 8 second False
' 9 value False
' 10 False
' 11 False
' 12 False
' 13 False
' 14 12 True
' 15 False
' 16 False
' 17 False
' 18 False
' 19 False
' 20 third False
' 21 value False
' 22 False
' 23 False
' 24 False
' 25 32323 True
注意:我在每个打印行上放置了前导双引号,以便语法突出显示不会弄乱输出。
答案 3 :(得分:1)