Как разбить текстовый блок так, чтобы он отображал только одно слово в каждой строке - PullRequest
0 голосов
/ 16 января 2019

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

Ответы [ 2 ]

0 голосов
/ 16 января 2019

После небольшого исследования я определил, что ограничение в 255 символов для текстовых строк влияет только на некоторые функции, а не на все. Поэтому я взял документ Word размером 17355 символов (включая пробелы) и запустил Split (), чтобы создать массив. Не было ошибок, и результирующий массив имел UBound 2690.

Итак, следующий вопрос: какой тип текста импортируется в Word и какой у него размер. Это просто список слов, разделенных пробелами, или другой разделитель? Содержит ли он пунктуацию? Если это просто список слов, разделенных пробелами или другим разделителем, таким как запятая или точка с запятой, функция Split () отсортирует слова в массив, по крайней мере, до 17 000 символов. Для большего текстового блока потребуется дополнительное тестирование. Если текст содержит знаки препинания, вам придется обработать текст, чтобы удалить ненужные знаки препинания, что можно сделать с помощью поиска и замены с помощью подстановочного знака, если строка поиска составляет <= 255 символов. Но если все, что у вас есть, это слова и пробелы или какой-либо другой разделитель, то использование Split () для разделения каждого слова на элемент массива сработает, а затем просто запустите код, как во второй половине моего предыдущего примера: </p>

For x = LBound(stArr()) to UBound(stArr())
    stWord = stArr(x) & "^p"
    Selection.Typetext stWord
Next
0 голосов
/ 16 января 2019

Проблема с работой с большими блоками текста в Word заключается в том, что такие операции, как Find и Replace, могут выполняться только с текстовыми строками Find из 255 символов или менее, не вызывая ошибки. После того, как вы импортируете свой текст и назначите его строковой переменной, вы можете использовать Len (), чтобы определить длину строки, а затем использовать Left () Mid () и Right (), чтобы разбить большую строку на более короткие куски по 250 символов. каждый. Вот код, который я написал для поиска и замены:

With Selection.Find
    y = Len(Selection.Text)
    Select Case y          
        Case Is <= 250
            x = 1
            .Text = stFound
            .Execute Replace:=wdReplaceAll    
         Case Is <= 500
             Dim stFound2 As String      
              x = 2
              z = Len(stFound) - 250
              stFound1 = Left(stFound, 250)
              stFound2 = Right(stFound, z)
         Case Is <= 750
              Dim stFound2 As String
              Dim stFound3 As String
              x = 3
              stFound1 = Left(stFound, 250)
              stFound2 = Mid(stFound, 251, 249)
              stFound3 = Right(stFound, Len(stFound) - 500)
    End Select
End With

Затем я использовал цикл For Next для запуска поиска и замены в каждой строке.

В вашей ситуации будет важно не разбивать строки в середине слова. Для этого вы можете использовать функцию InStr (), чтобы найти положение пробелов в вашей строке, а затем разбить текст в соответствии с тем, где находятся пробелы. Я не стал бы пытаться использовать функцию Split () для необработанного текста, так как в зависимости от размера строки вы можете столкнуться с ошибкой Subscript Out of Range.

Как только текст разбит на части, пригодные для использования, используйте функцию Split (), чтобы отправить каждое слово в массив, а затем выполните следующий код, чтобы поместить каждое слово в отдельную строку или абзац:

Dim stTxt as String
dim stWord as String
dim stArr() as String
dim x as long
stTxt = 'One of your text strings

stArr() = Split(stTxt)

For x = LBound(stArr()) to UBound(stArr())
    stWord = stArr(x) & "^p"
    Selection.Typetext stWord
Next
...