Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Как преобразовать текст?   Найти похожие ветки 

 
_Hawk_   (2006-05-25 12:37) [0]

Привет всем! У меня такой вопрос: имеется определенный текст – он вводится пользователем и всегда разный, но по одному принципу (например, «Note: 0100 40 68 95»), как мне сделать так, чтобы этот текст преобразовывался примерно в следующее: «Note» и «0100» удалялось, а перед «40 68 95» вставлялась буква («a») – пример: «a40 a68 a95»… Заранее весьма благодарен!


 
Kolan ©   (2006-05-25 12:43) [1]

Нужно выделить из строки слова, для этого нужно определится с разделителями(у вас это пробел). И вспользоваться тандартными ф-циями Pos, Copy, Delete.
К строке букву("40" - "а40") добовляют с помощью оператора присваивания :=.


 
_HAWK_   (2006-05-25 12:44) [2]

Kolan, а можно примерчик...


 
Desdechado ©   (2006-05-25 12:48) [3]

примерчики по F1 на указанных функциях


 
_HAWK_   (2006-05-25 12:50) [4]

> примерчики по F1 на указанных функциях
У меня с английским плоховато...


 
Kolan ©   (2006-05-25 12:52) [5]

Есть еще вариант. TStringList может разбить на слова сам:
var
 Strings: TStringList;
begin
 Strings := TStringList.Create;
 try
   Strings.Delimiter := " ";
   Strings.DelimitedText := "40 04 99";
   Memo1.Lines.AddStrings(Strings);
 finally
   Strings.Free;
 end;
end;

Добавить буквы и склеить назад в строку думаю сам сможешь.


 
Вася   (2006-05-25 12:52) [6]

а программы ты на русском пишешь?
примерчик написан на Дельфи, а не на инглише


 
_HAWK_   (2006-05-25 12:54) [7]

> а программы ты на русском пишешь?
> примерчик написан на Дельфи, а не на инглише

ну объясняется-то по F1 на инглише!


 
_HAWK_   (2006-05-25 12:56) [8]

> Strings.DelimitedText := "40 04 99";
Это заданный параметр, а как сделать, чтобы он создавался автоматически (в зависимости от введенной строки)?


 
Kolan ©   (2006-05-25 13:08) [9]

Телепатируюя :) как-то так:
Strings.DelimitedText := Edit1.Text;
Угадал?


 
_HAWK_   (2006-05-25 13:10) [10]


> Телепатируюя :) как-то так:
> Strings.DelimitedText := Edit1.Text;
> Угадал?

А че тогда делать с "Note" и "0100" (в данном случае)?


 
Andy BitOff ©   (2006-05-25 13:17) [11]


_HAWK_   (25.05.06 13:10) [10]

Послушайте, молодой человек, а Вам не кажется, что это уже наглость? Всё, что Вам надо, для решения вашей задачи, Вам было предоставленно еще в [1], а Вы хотите, чтобы за Вас всё написали.


 
API ©   (2006-05-25 13:17) [12]

_HAWK_

Вы б, молодой человек, взяли бы у папы 300 рублей, подошли бы к мало-мальски грамотному студенту, сформулировали бы задачу, получили бы решение.
Форуму - меньше трафика, участникам - меньше глупых вопросов, вам - быстрый результат, студенту - приработок.


 
wicked ©   (2006-05-25 13:18) [13]

а регекспом не судьба разобрать?.... как раз регекспы для таких штук придумали....
http://regexpstudio.com/ - качаем и наслаждаемся...


 
Desdechado ©   (2006-05-25 13:24) [14]

wicked ©   (25.05.06 13:18) [13]
если не судьба с Pos и Copy, то тем паче с регулярными выражениями


 
Kolan ©   (2006-05-25 13:27) [15]

Вотбыло у тебя:
Note: 0100 40 68 95
Возпользовавшись [5]
Ты получил список строк. Если что-то не понял, то смотри в справке:TStrings, TStringList, String. И книжку бы прочесть неплохо было(любую).

Теперь можно так:
Ко всем добавляешь твое "а" в цикле:
А затем формирушь новую строку.
Вот пример:
var
 Strings: TStringList;
 I: Integer;
 S: String;
begin
 Strings := TStringList.Create;
 try
   Strings.Delimiter := " ";
   Strings.DelimitedText := "Note: 0100 40 68 95";
   for I := 0 to Strings.Count-1 do
     Strings[I] := "a" + Strings[I];

   S := "";
   for I := 0 to Strings.Count-1 do
     if I > 2 then
       S := S + Strings[I] + " ";

   Memo1.Lines.AddStrings(Strings);
   Memo1.Lines.Add(S);
 finally
   Strings.Free;
 end;

Понятно, что 2 цикла сдесь не надо, что это:S := S + Strings[I] + " " даст лишнй пробел в конце итд, но это просто пример.. Дальше сам.


 
D5RuLeZ   (2006-05-25 14:59) [16]

Strings.Delimiter := " "; // [Error] Undeclared identifier: "Delimiter"
Strings.DelimitedText := // [Error] Undeclared identifier: "DelimitedText"

D5 В модуле Classes таких не найдено. Как быть?


 
D5RuLeZ   (2006-05-25 16:12) [17]

C таким же успехом можно использовать функции
Strings.IncreaseMyMoneyAccount : Integer
и
Strings.AddBeerInRefrigerator : Integer


 
Andy BitOff ©   (2006-05-25 16:21) [18]

Вот, Kolan взялся тебе помогать, его и жди или можешь ему поспамить, вот радость-то ему будет =)


 
Desdechado ©   (2006-05-25 16:24) [19]

эффект будет больше, если последовать совету API ©   (25.05.06 13:17) [12]
а за эти 300 рублей можно готовый код получить, на котором и поучиться заодно, если желание будет


 
Kolan ©   (2006-05-25 16:25) [20]


> D5RuLeZ   (25.05.06 14:59) [16]

Незнаю как там в Delphi 5. В топике этого неуказано. Если там этого нет, то см. [1].


>Andy BitOff ©   (25.05.06 16:21) [18]

Вроде взялся помогать _Hawk_ ...

> C таким же успехом можно использовать функции
> Strings.IncreaseMyMoneyAccount : Integer
> и
> Strings.AddBeerInRefrigerator : Integer
>

Что за бред, программа копилируется нормально. В D2006 и в D7.


 
Гарри Поттер ©   (2006-05-25 16:30) [21]

> > Strings.IncreaseMyMoneyAccount : Integer
> > и
> > Strings.AddBeerInRefrigerator : Integer
> >
> Что за бред, программа копилируется нормально. В D2006 и
> в D7.

Гы. И работает? :)


 
Kolan ©   (2006-05-25 16:39) [22]

Kolan ©   (25.05.06 13:27) [15]
Вот это работает. Сколько времени потратил(2 мин) так и работает, но работает :)


 
Desdechado ©   (2006-05-25 16:40) [23]

> AddBeerInRefrigerator
а кто-то говорил, что с английским туго



Страницы: 1 вся ветка

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.081 c
10-1120575391
Yurij-7
2005-07-05 18:56
2006.06.18
Word : Поиск и замена


15-1148363783
Steepe Wolf
2006-05-23 09:56
2006.06.18
Выбор мобильного


8-1137748651
SergProger
2006-01-20 12:17
2006.06.18
Разложить TColor


15-1148273802
Ega23
2006-05-22 08:56
2006.06.18
С Днём рождения! 21 мая


15-1147673699
Сергей И
2006-05-15 10:14
2006.06.18
Информация по литературе