Как мне избежать точки с запятой в сценарии VB? - PullRequest
0 голосов
/ 12 февраля 2010

У меня есть файл VBScript, который читает файл и отправляет каждую строку в терминальную программу. Когда дело доходит до точки с запятой в середине строки, она разделяет точку с запятой в строке.

Я уже довольно давно использую этот код с другими строками без проблем. В файле, который читает скрипт, есть одна строка на строку.

Строка в файле, вызывающая проблему: 2101; 99PSP

Вот код, который я использую (с программой эмуляции терминала под названием Reflections):

Sub NarcoticOrderableItemTurnOff()

''# Constants used by OpenTextFile()
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Const ICON_INFO = 64    ''# Information message; displays 'i' icon.

Set wshshell = CreateObject("WScript.Shell")

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = _
        objFSO.OpenTextFile("P:\NarcoticOrderableItems.txt", ForReading)

Session.Transmit "^Orderable Item Edit (CPRS)" & vbCr

    Do Until objTextFile.AtEndOfStream

        strNextLine = objTextFile.ReadLine
        arrC2oderableItemList = Split(strNextLine, ";", 3)

        'arrServiceList(0) = Area of Use
        'arrServiceList(2) = Printer for that area of use

        With Session

        .WaitForString "Select ORDERABLE ITEMS NAME:"
        .Transmit arrC2oderableItemList(0) & vbCr
        .WaitForString "//"
        .Transmit "N" & vbCr
        .WaitForString "//"
        .Transmit vbCr
        .WaitForString "//"
        .Transmit vbCr
        .WaitForString "//"
        .Transmit vbCr
        End With

    Loop

objTextFile.close

Session.MsgBox "All done!  C2 Orderable Items turned off!", vbExclamation

''#ErrorHandler:
''#    Session.MsgBox Err.Description, vbExclamation + vbOKOnly

End Sub

Ответы [ 3 ]

1 голос
/ 12 февраля 2010

Если эта проблемная строка является целой строкой из файла, который вы читаете:

2101;99PSP

Проблема в том, что вы пытаетесь получить 3 элемента из каждой строки, а в этой есть только 2. Чтобы учесть строки, в которых нет 3-го элемента, вы должны удалить 3-й параметр из функции Split и затем проверить UBound of Array перед использованием 3-го элемента.

arrC2oderableItemList = Split(strNextLine, ";")

If UBound(arrC2oderableItemList) >= 2 Then
  ''# There are 3 items or more in the Array (O-based)
  ''# Can do something with arrC2oderableItemList(2)
Else
  ''# There are only 2 items (or less) in the Array
  ''# Do not use arrC2oderableItemList(2)
End If
1 голос
/ 12 февраля 2010

Если вы разделяете строки на точки с запятой, но текст содержит лишние точки с запятой, вам нужно будет

  1. поиск лишних точек с запятой
  2. измените их на шаблон, который обычно не встречается в тексте
  3. разделить вашу линию
  4. изменить шаблон с шага 2 обратно на точку с запятой

Или выберите легкий путь и не допускайте лишних точек с запятой в файлах, которые вы читаете.

Публикация нескольких примеров строк (включая строку проблемы) позволила бы кому-нибудь помочь вам в написании кода для поиска лишних точек с запятой.

Если (2101; 99PSP) - это все, что находится на линии, см. Ответ Шона Стюарда.

1 голос
/ 12 февраля 2010

Я думаю, что это может быть связано со следующей строкой кода:

arrC2oderableItemList = Split(strNextLine, ";", 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...