Есть ли функция VB6, аналогичная функции С-scanf? - PullRequest
3 голосов
/ 01 июня 2011

Я пытаюсь прочитать файл, состоящий из строк текста следующего вида ...

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 для обработкикаждая очередь за один раз.Есть ли такая функция, или я должен вручную разбирать каждую строку (есть несколько разных типов линий).

Ответы [ 4 ]

5 голосов
/ 01 июня 2011

Нет эквивалента sscanf. Я просто выбрал бы линии вручную, используя Mid () . Это довольно просто.

  • Mid(string, start, length) вернет подстроку, начинающуюся с символа start и длиной length символов.
    • start основано на 1 - первый символ в строке номер 1.
    • Тщательно подумайте о start и length. Как будет выглядеть файл, если он содержит действительно большое число? Вероятно, число будет расширяться влево (если числа выровнены по правому краю в файле, что, как мне показалось, ваш пробег может отличаться).
  • Используйте Val для преобразования подстрок в числа

Лично я бы избежал Ввод # . Input # предназначен для чтения файлов, записанных с VB6 с использованием Write #. Если вы попытаетесь прочитать произвольный формат файла с помощью Input #, вы можете столкнуться с нечетными крайними случаями.

2 голосов
/ 01 июня 2011

Имея такой файл, вы можете использовать любой метод чтения файла построчно, а затем использовать функции 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, вы увидите это, где за каждым числом следует «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

Примечание. Я помещаю двойные кавычки в начале каждой строки печати, чтобы подсветка синтаксиса не мешала выводу.

2 голосов
/ 01 июня 2011

Хотя MarkJ дал вам VB6 способ делать вещи, вы можете проверить FWIW:

http://www.freevbcode.com/ShowCode.asp?ID=3806

"C Строковые функции SScanf и StrTok, реализованные в VB"

Он реализует функцию ScanString (), которая должна быть эмуляцией sscanf ().

1 голос
/ 01 июня 2011

Оператор Input должен быть достаточным для большинства случаев (возможно, с некоторой логикой, чтобы определить тип строки и вызвать соответствующий оператор ввода).

Существует довольно всеобъемлющий анализразличные команды ввода-вывода файла в VB6 с некоторыми хорошими примерами чтения 'стиля COBOL', исправленного с файлом здесь .

Если вы имеете дело с нечетным или несовместимым форматом, который может использовать Input 'Я имею в виду, как вы можете разобрать вручную.Это может быть лучшим вариантом, так как вы упоминаете, что есть разные форматы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...