Консультация № 55460
14.09.2006, 16:06
0.00 руб.
0 4 3
Вопрос следующий:
У меня есть TextBox в котором есть некий текст на несколько строк. Мне нужно его расчленить на строки, то есть каждую отдельную строку допустим записать в отдельную переменную. Как это можно в VB/VBA грамотно сделать?
Заранее спасибо.

Обсуждение

Неизвестный
14.09.2006, 16:20
общий
это ответ
Здравствуйте, Pithon!

Посмотрите мой ответ на вопрос 40011.
А для ответа привожу код преобразования и определения количества предложений, слов и букв в вводимом тексте.

На форме Form1 имеется TextBox1 и Label1.
Данные вводятся в TextBox1 по правилам, описанным в приложении, а в Label1 выводится результат.

С уважением.

Приложение:
Private Sub Text1_Change()Dim simv As String * 1b = 0s = 0p = 0p1 = Falses1 = False‘В состав набранного текста входят буквы, символы пунктуации, из которых нам важна точка‘как символ разделения между предложениями, и пробелы, которые разделяют слова.‘Правило написания предложений:‘1. Слова разделяются пробелами‘2. Первое слово, заключенное в скобки (кавычки), пишется без пробела‘3. Закрывающая скобка (кавычка) пишется без пробела‘4. После знаков пунктуации ставится пробел‘5. Точка, восклицательный и вопросительный знаки используются только как признак конца предложения‘6. При обработке начальные и конечные пробелы обрезаютсяIf Len(Trim(Form1.Text1)) > 0 Then‘Если длина текста ненулевая, есть первое слово и первое предложение p = 1 s = 1 For i = 1 To Len(Trim(Form1.Text1)) simv = Mid(Trim(Form1.Text1), i, 1) If p1 And Not (simv = "." Or simv = "!" Or simv = "?") Then ‘если после точки еще есть символы кроме знаков препинания, значит следующее предложение p = p + 1 p1 = False End If If s1 And Not simv = " " Then ‘если после пробела еще есть символы кроме пробела, значит следующее слово s = s + 1 s1 = False End If Select Case simv Case ".", "!", "?" ‘признак возможного начала следующего предложения p1 = True Case " " ‘признак возможного начала следующего слова s1 = True Case "A" To "Z", "a" To "z", "А" To "Я", "а" To "я", "Ё", "ё" b = b + 1 End Select NextEnd IfForm1.Label1 = "предложений - " & p & " слов - " & s & " букв - " & bEnd Sub
Неизвестный
14.09.2006, 16:30
общий
это ответ
Здравствуйте, Pithon!
Например так:

k = Len(vbNewLine)
For i = 1 To Len(Text1)
If Mid(Text1, i, k) = vbNewLine Then
List1.AddItem Mid(Text1, l, i - l) ‘ - добавляем строку в listbox
l = i + k
i = i + k - 1
End If
Next
List1.AddItem Mid(Text1, l, Len(Text1))
Неизвестный
14.09.2006, 17:01
общий
Немного не тот ответ написал, но описан принцип определения строки, слова и символа.Для разделения строк примерный код:Option ExplicitOption Base 1dim a( 10 ) as long ‘10 - максимальное количество строк, но можно воспользоваться оператором ReDimdim b( 10 ) as long ‘ в массиве a хранится начальная позиция символов предложения, а в b конечная.dim i as longdim strok as longdim pos as longfor i=1 to 10 a ( i ) =0 b ( i ) =0nexta ( 1 ) =1 ‘ определяем для первого предложения начальную позицию в строке = 1b ( 1 ) = Len ( Form1.Text1 )strok = 1pos = InStr ( a ( strok ) , Form1.Text1 , "." )Do While pos > 0 b ( strok ) = pos ‘ номер конечного символа предложения - точка strok = strok + 1 ‘ новое предложение a ( strok ) = pos + 1 ‘ номер начального символа нового предложения - следующий после точки b ( strok ) = Len ( Form1.Text1 ) ‘ номер конечного символа - длина строки pos = InStr ( a ( strok ) , Form1.Text1, "." ) ‘ ищем следующую точкуLoopВ итоге в массивах хранятся начальный и конечный символ отдельного предложения включая точку.Если в массиве a значение больше длины строки, то предложений больше нет.Для выделения предложения воспользуйтесь функцией Mid :predloz3 = mid ( form1.text1 , a ( 3 ) , b ( 3 ) - a ( 3 ) + 1 )С уважением.
Неизвестный
15.09.2006, 07:05
общий
это ответ
Здравствуйте, Pithon!
Если нужно просто разбить техт на строки оканчивающиеся на "перевод строки", можно использовать Split():
например:

Dim lines() as String

lines = Split ( TextBox1.text , vbCrLf )

теперь lines - это одномерный массив каждый элемент которого строка из TextBox1
Форма ответа