1

Тема: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

Есть текстовый файл, в каждой строке которой слова разделены не одним, а несколькими пробелами, причём количество этих пробелов может быть разным.
Если бы слова были разделены одним пробелом, разобрать на слова легко: MyArray = Split(string, " ", -1, 1).
Но в моём случае, в элементы массива MyArray записываются также и "лишние" пробелы.
Есть ли какой штатный способ решить мою задачу?

2

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

Если бы количество пробелов было фиксированным, то тоже понятно: MyArray = Split(string, "      ", -1, 1).

3 (изменено: Dmitrii, 2011-09-16 10:36:55)

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

Вариант 1. Каждый элемент массива обрабатывайте функцией Trim().
Вариант 2. С помощью регулярных выражений замените последовательности пробелов на одиночные пробелы, после чего уже преобразуйте строку в массив.

4

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

Спасибо

5 (изменено: Dmitrii, 2011-09-16 14:32:12)

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

Сейчас только сообразил, что при преобразовании строки в массив без предварительной замены последовательностей пробелов на одиночные пробелы функция Trim() не понадобится.
Выражение Split(string, " ", -1, 1) вернёт массив, где каждому "лишнему" пробелу исходной строки будет соответствовать элемент, значением которого является строка нулевой длины. Следовательно, потребуется либо "уплотнить" массив, избавившись от этих элементов, либо просто проверять длину (в символах) каждого элемента перед дальнейшей обработкой.

6

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

String[] array = s.split("\\p{Space}++");

7

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

al_chel, это явно не VBScript .

8 (изменено: omegastripes, 2014-09-02 21:44:30)

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

sString = "some     text"
Do
    lTmp = Len(sString)
    sString = Replace(sString, "  ", " ")
Loop Until Len(sString) = lTmp
aMyArray = Split(sString, " ", -1, 1)
Щт Уккщк Куыгьу Туче
’ҐЄгй п Є®¤®ў п бва Ёж : 1251

9

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

Я обычно так делаю

Msg = "строка   с      пробелами    1"

While Instr(Msg, "  ") > 0 'В кавычках 2 пробела

  Msg = Replace(Msg, "  ", " ") '2 пробела меняется на 1

WEnd
SplitMsg = Split(Msg, " ")
"Единство,- возвестил оракул наших дней: -
Быть может спаяно железом лишь и кровью"…
Но мы попробуем спаять его любовью,-
А там увидим, что прочней…    (Ф. Тютчев)       Тут хорошая справка по vbs.

10

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

MikeSh пишет:

While ...
WEnd

Замену многих пробелов на один можно сделать без цикла (правда, нужно найти символ, который не используется в тексте):

blabla = Chr(1)        ' символ, которого точно нет в тексте
Msg = Replace(Msg, "  ", " " + blabla) 
Msg = Replace(Msg, blabla + " ", "") 
Msg = Replace(Msg, blabla, "") 

11

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

Выше уже было сказано:

Dim strWords

strWords = "Мама     мыла   раму.  Рабы   не  мы,   мы   не    рабы."

With WScript.CreateObject("VBScript.RegExp")
    .Pattern = " {2,}"
    .Global = True
    
    If .Test(strWords) Then
        strWords = .Replace(strWords, " ")
    End If
End With

А затем смело делайте «Split(strWords, " ")», ежели кому потребно.

12

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

alexii, [А-Яа-яA-Za-z]+, Execute.

13

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

JSman, ещё "ёЁ". На всякий случай

14

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

JSman, ну, это ежели судить по буковкам, тогда — да. А я так понял, что речь изначально шла сугубо про ориентировку по пробельным символам, то есть, включая все прочие символы в состав слов.

15

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

alexii пишет:

JSman, ну, это ежели судить по буковкам, тогда — да. А я так понял, что речь изначально шла сугубо про ориентировку по пробельным символам, то есть, включая все прочие символы в состав слов.

Как вариант

[^\s]+

?


Option Explicit

Dim oCol
Dim e
Dim sTmp

With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "[^\s]+"
    Set oCol = .Execute("Мама    мыла   раму.  Рабы   не  мы,   мы   не    рабы.")
End With

MsgBox "Найдено элементов: " & oCol.Count

if oCol.Count < 0 Then WScript.Quit
For Each e in oCol
    sTmp = sTmp & "[" & e & "]"
Next
MsgBox sTmp
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

16

Re: VBS: Как разобрать строку, где слова разделены НЕСКОЛЬКИМИ пробелами

var str = "Мама    мыла   раму.  Рабы   не  мы,   мы   не    рабы.";
var re = / +/;
var strArray = str.split(re);
WScript.Echo("Array="+strArray);