是否有与C的sscanf类似的VB6函数?

问题描述

| 我正在尝试读取由以下几种形式的文本行组成的文件...
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的函数,以一次性检查每一行。是否有这样的功能,或者我必须手动将每一行分开(有几种不同的行)。     

解决方法

        虽然MarkJ为您提供了VB6的处理方式,但您可能需要查看FWIW: http://www.freevbcode.com/ShowCode.asp?ID=3806 \“在VB中实现的C字符串函数SScanf和StrTok \” 它实现了一个功能ScanString(),该功能应该是sscanf()的仿真。     ,        没有equivalent1的等价物。我只是使用Mid()手动将线分开。这很容易。
Mid(string,start,length)
将返回一个子字符串,从字符
start
开始,长度为
length
个字符。
start
从1开始-字符串中的第一个字符为数字1。 仔细考虑
start
length
。如果文件包含很大的数字,它将是什么样?该数字可能会进一步向左延伸(如果数字在文件中右对齐,这在我的经验中很常见-您的里程可能会有所不同)。 使用
Val
将子字符串转换为数字 Val始终使用点作为小数点分隔符-这是您所需要的吗? 我个人会避免输入#。 ѭ9用于读取使用ѭ10从VB6写入的文件。如果尝试使用
Input #
读取任意文件格式,则可能会遇到奇怪的情况。     ,        给定这样的文件,您可以使用任意方法逐行读取文件,然后使用
Trim
Split
函数为每行创建一个由空格分隔的字符串的字符串数组。然后通过保留从
IsNumeric
函数返回
True
的那些元素来解析所得数组中的数字: 将其放在立即窗口中以查看其工作方式:
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
注意:我在每个打印行上都使用了双引号,这样语法突出显示不会与输出混淆。     ,        在大多数情况下,Input语句应该足够了(也许具有某种逻辑来检测行的类型并调用相关的输入语句)。 在VB6中对不同的文件IO命令进行了相当全面的检查,其中有一些不错的示例,这些示例在此处读取了文件固定的“'COBOL样式\'”。 如果您处理的是Input无法处理的奇怪或不一致的格式,那么您可以手动分拆。因为您提到了不同的格式,所以这可能是最好的选择。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...