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

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

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

Сообщение Александр Андреев » 21.04.2003 (Пн) 17:26

В Visual C++ в классе CString определена функция Format.
C помощью нее можно делать следующее:

Код: Выделить всё
CString s1 = "The angle is %d degrees.";
CString s2;

double angle = 10;

s2.Format(angle, s1);

Получим s2 равное "The angle is 10 degrees."

А в VB есть что-нибудь похожее?

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

Сообщение RayShade » 21.04.2003 (Пн) 17:29

Для этого можно использоать ф-цию Replace.

Например:



Код: Выделить всё
mystr = "The angle is %d degrees."
myval = 10
msgbox replace(mystr,"%d",cstr(myval),,,vbtextcompare)

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 21.04.2003 (Пн) 17:31

:shock: Хитро...

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 21.04.2003 (Пн) 17:35

А вот это как обойти?

CString s1 = "The first angle is %d degrees. The second angle is %d degrees.";
CString s2;

double angle1 = 10;
double angle2 = 20;

s2.Format(angle1, angle2, s1);

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 21.04.2003 (Пн) 18:02

Александр Андреев писал(а):А вот это как обойти?

CString s1 = "The first angle is %d degrees. The second angle is %d degrees.";
CString s2;

double angle1 = 10;
double angle2 = 20;

s2.Format(angle1, angle2, s1);


Используем её два раза с параметром Count = 1

Dim str As String
Dim angle1 As Double, angle2 As Double

angle1 = 10
angle2 = 20


str = Replace("The first angle is %d degrees. The second angle is %d degrees", "%d", angle1, , 1)
str = Replace(str, "%d", angle2, , 1)

MsgBox str

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 21.04.2003 (Пн) 18:06

GoGosha писал(а):
Александр Андреев писал(а):А вот это как обойти?

CString s1 = "The first angle is %d degrees. The second angle is %d degrees.";
CString s2;

double angle1 = 10;
double angle2 = 20;

s2.Format(angle1, angle2, s1);


Используем её два раза с параметром Count = 1

Dim str As String
Dim angle1 As Double, angle2 As Double

angle1 = 10
angle2 = 20


str = Replace("The first angle is %d degrees. The second angle is %d degrees", "%d", angle1, , 1)
str = Replace(str, "%d", angle2, , 1)

MsgBox str


Или такую функу:
Код: Выделить всё
Private Sub Form_Load()
    Dim str As String
    Dim angle1 As Double, angle2 As Double
   
    angle1 = 10
    angle2 = 20

   
    'str = Replace("The first angle is %d degrees. The second angle is %d degrees", "%d", angle1, , 1)
    'str = Replace(str, "%d", angle2, , 1)
   
    str = Format("The first angle is %d degrees. The second angle is %d degrees", 10, 20)
   
    MsgBox str
   
End Sub


Public Function Format(str As String, ParamArray Replacement() As Variant)
    Dim Elem As Variant
    Dim Strings As String
   
    Strings = str
   
    For Each Elem In Replacement
        Strings = Replace(Strings, "%d", Elem, , 1)
    Next Elem
   
    Format = Strings
End Function

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 21.04.2003 (Пн) 18:08

Но если тебе надо ещё и %c %s и др. - то незнаю

GoGosha
Постоялец
Постоялец
 
Сообщения: 642
Зарегистрирован: 02.08.2002 (Пт) 9:14
Откуда: Russia

Сообщение GoGosha » 21.04.2003 (Пн) 18:08

GoGosha писал(а):Но если тебе надо ещё и %c %s и др. - то незнаю


Вернее ккод написать можно, если тебе это действительно надо

Александр Андреев
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 145
Зарегистрирован: 09.04.2003 (Ср) 16:43
Откуда: Н.Новгород

Сообщение Александр Андреев » 21.04.2003 (Пн) 18:13

Спасибо, я разобрался.
А с "%d" тоже все просто. Надо в аргумент передавать Str(num) и все будет ОК.


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 97

    TopList