Форматирование текста

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Форматирование текста

Сообщение Lotreck » 14.04.2008 (Пн) 9:56

Возможно ли программно отформатировать следующий пример текстового файла.
Текст имеющий вид:
Код: Выделить всё
     xxxxxx      xx        xxxx   x
xxxx xxxx   x     xxxxxxx
      x  x    x xx                             

Привести к виду:
Код: Выделить всё
xxxxxx    xx        xxxx      x
xxxx      xxxx      x         xxxxxxx
x         x         x         xx                 

Длинна, количество слов и строк и интервалы между колонками взяты произвольно.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2008 (Пн) 10:14

Да.
Lasciate ogni speranza, voi ch'entrate.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 14.04.2008 (Пн) 10:32

Каким образом, не подскажите?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2008 (Пн) 11:05

Нет, не подскажу.
Сформулируй задачу и в ней будет 70% решения.
Lasciate ogni speranza, voi ch'entrate.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 14.04.2008 (Пн) 11:39

Попал ко мне текстовый файл с данными скопированными из таблицы. Слова упорядоченные в таблице по полям в текстовом файле сместились в пределах стороки. Пытаюсь их обратно упорядочить по "колонкам" уже в текстовом файле.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 14.04.2008 (Пн) 11:46

Это бессмысленная задача. Такого рода форматирование будет очень сильно зависеть от программы отображения.

Разные редакторы по разному интерпретуируют последовательные пробелы, символы tab и так далее. Вдобавок, форматирование такого рода сильно зависит от используемого шрифта (моноширинный/переменный).

Я бы, нарисовал таблицу в HTML скажем (если цель - отображение) или в CSV (если цель - хранение и обработка). Это было бы более правильно.
I don't understand. Sorry.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2008 (Пн) 13:46

Тогда убираешь все последовательности пробелов, сводя их к одному пробелу, и форматируешь колонки, разделяя их по пробелу.
Lasciate ogni speranza, voi ch'entrate.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 14.04.2008 (Пн) 13:49

Для начала сделать из нескольких пробелов - один.
Потом этот один заменить на vbTab.

Это - частный случай. Для общего - надо больше подробностей.
label:
cli
jmp label

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 16.04.2008 (Ср) 0:05

А как размер табуляции задавать? Если я правильно понял через него назначается ширина колонки.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 16.04.2008 (Ср) 10:09

Никак.
RayShade писал(а):Разные редакторы по разному интерпретуируют последовательные пробелы, символы tab и так далее. Вдобавок, форматирование такого рода сильно зависит от используемого шрифта (моноширинный/переменный).
Если конечная цель - создать ровную табличку для просмотра блокнотом и в каждой ячейке не более одного слова, то нужно множественные пробелы заменить на один, текст разбить на строки, строки на слова, для каждой колонки найти самое длинное слово, остальным словам соответствующей колонки добавлять необходимое количество пробелов.
Лучший способ понять что-то самому — объяснить это другому.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 16.04.2008 (Ср) 11:02

Каким образом определить это самое необходимое количество пробелов для постоянного числа слов в пределах одной строки?

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 16.04.2008 (Ср) 12:39

Необходимое число пробелов вычисляется для конкретного слова в конкретном столбце, а не "в пределах одной строки".
МакмальнаяДлинаДляСтолбца - Len(ТекущееСловоВСтолбце).

Код: Выделить всё
'убираем лишние пробелы
Do
    pLen = Len(sText)
    sText = Replace(sText, "  ", " ")
Loop Until pLen = Len(sText)

Dim MaxLengths() As Integer
Dim Lines() As String
Dim Words() As String

'разбиваем на строки
Lines = Split(sText, vbCrLf)

'оределяем кол-во столбцов
Words = Split(Lines(0)," ")
x = UBound(Words)
Redim MaxLengths(x)

'находим максимальные длины слов для каждого столбца
For x=0 to UBound(Lines)
    Words = Split(Lines(x)," ")
    For y = 0 To UBound(Words)
        If Len(Words(y))>MaxLengths(y) Then MaxLengths(y) = Len(Words(y))
    Next
Next

'получаем наконец отформатированный текст
For x=0 to UBound(Lines)
    Words = Split(Lines(x)," ")
    For y = 0 To UBound(Words)
        s = s & Words(y) & Space(MaxLengths(y) - Len(Words(y) + 1) '+1 чтобы максимальные слова не липли к соседям
    Next
    s = s & vbCrLf
Next
Это способ "в лоб", может есть более оптимальный.
Лучший способ понять что-то самому — объяснить это другому.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 16.04.2008 (Ср) 14:00

Респект за детальную информацию.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Форматирование текста

Сообщение Saturn.65 » 28.04.2010 (Ср) 11:34

При диалоге выбора файла он записывается в list1 с полным путем. Например C:\WINDOWS\regedit.exe
Как получить именно название файла, без пути? Можно ли отфильтровать? А то не хорошо получается при выводе
MsgBox "Файл " & Text1.Text & " добавлен в список.", vbInformation.
Код: Выделить всё
Dim ofn As OPENFILENAME
ofn.lStructSize = Len(ofn)
ofn.hwndOwner = Form1.hwnd
ofn.hInstance = App.hInstance
ofn.lpstrFilter = "Исполняемые файлы (*.exe)" + Chr$(0) + "*.exe" + Chr$(0)
ofn.lpstrFile = Space$(254)
ofn.nMaxFile = 255
ofn.lpstrFileTitle = Space$(254)
ofn.nMaxFileTitle = 255
ofn.lpstrInitialDir = CurDir
ofn.lpstrTitle = "Our File Open Title"
ofn.flags = 0
Dim a
a = GetOpenFileName(ofn)

If (a) Then
Text1.Text = Trim$(ofn.lpstrFile)

MsgBox "Файл " & Text1.Text & " добавлен в список.", vbInformation

Else
'MsgBox "Cancel was pressed"
End If
Главное, ребята, сердцем не стареть...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Форматирование текста

Сообщение alibek » 28.04.2010 (Ср) 18:22

FileTitle
InStrRev
Lasciate ogni speranza, voi ch'entrate.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Форматирование текста

Сообщение Saturn.65 » 28.04.2010 (Ср) 20:32

alibek спасибо!
Это то я нашел. Все усложняется тем, что список файлов помещается в ListBox с путями, а надо, чтобы при клике, в другом ListBoх отображались только имена без путей. Пускай даже и с расширением.
Главное, ребята, сердцем не стареть...

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Форматирование текста

Сообщение iGrok » 28.04.2010 (Ср) 22:59

Saturn.65 писал(а):alibek спасибо!
Это то я нашел. Все усложняется тем, что список файлов помещается в ListBox с путями, а надо, чтобы при клике, в другом ListBoх отображались только имена без путей. Пускай даже и с расширением.

InStrRev по "\" + Mid$
Ну или
http://msdn.microsoft.com/en-us/library/bb773589.aspx
label:
cli
jmp label

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Форматирование текста

Сообщение Хакер » 28.04.2010 (Ср) 23:08

Не или, а только.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Saturn.65
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 543
Зарегистрирован: 13.10.2006 (Пт) 18:46

Re: Форматирование текста

Сообщение Saturn.65 » 29.04.2010 (Чт) 7:30

Хакер писал(а):Не или, а только.

Да. Самое то! Но кто бы это в пример на VB переделал? Я пошел другим путем. В период нахождения файла в коммон диалоге извлекаю его имя без пути
Код: Выделить всё
Text1.Text = ofn.lpstrFileTitle
. Правда оно идет с расширением.exe. Расширение мне мешает, так как поиск окна следящей программы идет по названию окна. Пришлось мне применить такую замену:
Код: Выделить всё
Private Sub Text7_Change()
iInput = Text7.Text
Text7.Text = Replace(iInput, ".exe", "")
End Sub
Главное, ребята, сердцем не стареть...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 77

    TopList