Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Вниз

Деление String по пробелу 


Ghost!   (2002-01-11 20:42) [0]

Здравствуйте!
Вопросик такой:
Есть 3 переменных: a, b, c. Все типа String. "а" содержит имя и фамилию человека, которые разделены тремя пробелами. Подскажите, плиз, как выделить в "b" только имя, а в "с" только фамилию?



Nicolas_   (2002-01-14 16:29) [1]

Попробуй RxLib. Модуль StrUtils, функции WordCount - количество слов в строке, ExtractWord - извлечь слово из строки.



fag2000@ok.ru   (2002-01-14 16:57) [2]

Можно по простому :
Читаем строку a до тех пор пока не встретится пробел копируем от начала и до позиции пробела в строку b остальное в c. Далее нормализуем b и c.



NickBat   (2002-01-14 17:03) [3]

Извините, но правы те кто говорит: если программист на Делфи чего-то не знает он шлет во все конференции - "Где найти компонент, который ...?".
Неужели так трудно найти пробел в строке, а затем вырезать то, что Вам надо?



Ghost.   (2002-01-14 17:07) [4]

function ArrayToStr(str: TStrings; r: string): string;
var
i: integer;
begin
Result:="";
for i:= 0 to Str.Count-1 do
begin
Result := Result+Str.Strings[i]+r;
end;
end;



Alx2   (2002-01-14 17:08) [5]

> Ghost. © (14.01.02 17:07)
А это что/для чего?



Фе   (2002-01-14 18:02) [6]

Это самоответ и самоотвод



Ghost.   (2002-01-15 08:57) [7]

Я дико извиняюсь просто торопился написал не ту функцию
function StrToArrays(str: string; r: string): TStrings;
var
j: integer;
Temp: TStringList;
begin
Temp := TStringList.Create();
while str <> "" do
begin
j := Pos(r,str);
if j=0 then j := Length(str) + 1;
Temp.Add(Copy(Str,1,j-1));
Delete(Str,1,j+length(r)-1);
end;
Result := Temp;
end;

тоесть я так понимаю нужно строку разделить на 3 или скока там через пробелы.
Может это не самый изящьный способ но сработает.
напимер
memo1.Lines:=StrToArrays(edit2.Text, " ")или какнить еще



Alx2   (2002-01-15 10:41) [8]

См.
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1010490021&n=0
Хотя, наверное уже посмотрел :))



Набережных С.   (2002-01-15 16:50) [9]

procedure ParseValueString(const Source, Separator: string;
List: TStrings; NullString: boolean = false;
BreakSpace: boolean = false);
const
DefSeparator:string =";";
var
Criteria,SL,n:integer;
P:PChar;
Spr:string;
begin
if Source = "" then raise Exception.Create("Source string is Null");
if List = nil then raise Exception.Create("List is Null");
if Separator = "" then Spr:=DefSeparator
else Spr:=Separator;
SL:=Length(Spr)-1;
if NullString then Criteria := 0
else Criteria:= 1;
P:=PChar(Source);
repeat
n:=Pos(Spr,P);
if n > Criteria then
begin
case BreakSpace of
false: List.Add(Trim(Copy(P,0,n-1)));
true: List.Add(Copy(P,0,n-1));
end;
P:=@(P[n+SL]);
end else
P:=@(P[n]);
until (n = 0) or (P[0] = #0);
if n = 0 then case BreakSpace of
false: List.Add(Trim(Copy(P,0,Length(P))));
true: List.Add(Copy(P,0,Length(P)));
end;
end;



Фе   (2002-01-15 20:52) [10]

На мой взгляд - красивое решение.
a:="Ghost Думай Лучше";
tmp := TStringList.Create;
a := StringReplace(a, #32, #13#10, rfReplaceAll);
b := tmp.Strings[0]; // Ghost
c := tmp.Strings[1]; // Думай
d := tmp.Strings[2]; // Лучше

* Красота спасет мир и не даст упасть программеру ниже..



Фе   (2002-01-15 21:02) [11]

Sorry
tmp.Text := StringReplace(a, #32, #13#10, rfReplaceAll);



evgeg   (2002-01-15 21:54) [12]

> Фе
А на мой взглад некрасивое..



evgeg   (2002-01-15 21:57) [13]

Да и неправильное.



Фе   (2002-01-15 22:14) [14]

Ну вот - начались придирки
tmp.Text := StringReplace(a, #32, #13#10, [rfReplaceAll]);
В конце концов - пусть это было бы дополнительной задачкой
для автора вопроса и его маленькой радостью.

А о вкусах - не спорят.
Не хочешь - не носи.



Ghost!   (2002-01-16 09:05) [15]

Здравствуйте! Всем спасибо, мне это очень помогло. Только у меня есть одна просьба: не путайте, плиз, [Ghost!] и [Ghost.]. Ещё раз спасибо.



SAN   (2002-01-16 11:25) [16]

>Фе
Ты предложил самый медленный вариант из всех :)))))))
Да к тому же еще и с ошибками!
Работай над собой!!!!!!!



Фэ   (2002-01-16 14:30) [17]

Ох, какие Вы кусачие.
Вопрос скорости не стоял.

Чем больше вариантов предложено, тем легче сделать выбор.
Ошибки..
Ну можно и так сказать.
Хотя это описка не делающая мне честь.
А вообще считаю неверным давать полностью работающий код.
Тогда Вами будут пользоваться как справочной системой.



SAN   (2002-01-16 15:26) [18]

>Фе
А тем кто дает мертвый код "лучше в тряпочку молчать"(твои слова ФЕ)



Фэ   (2002-01-16 15:48) [19]

Мальчик Вы еще юноша.
Трудитесь над собой больше.
Может Вас и заметят.



Alx2   (2002-01-16 15:55) [20]

Чем легче заданный вопрос, тем больше "раскидываются" мозги...



Ghost!   (2002-01-16 19:31) [21]

Извините, Фэ, но я не совсем понимаю Вас... Думаю, форумы созданы для обмены опытом. + в правилах чёрным по белому (или не совсем по белому) написанно, что распрастранение заведомо неправильной информации запрещено. ИМХО приведение неправильного кода противоречит правилу. Не знаю, может быть я чего не понимаю или ещё чё-нить.



Delirium   (2002-01-16 19:42) [22]

Я когда-то написал пару функций:

function SubStringCount(Str:String;Separator:String):integer;
var L:String;
begin
L:=Str+Separator;
Result:=0;
While Pos(Separator,L)>0 do
begin
Result:=Result+1;
Delete(L,1,Pos(Separator,L)+Length(Separator));
end;
end;

function GetSubString(Str:String;Num:integer;Separator:String):String;
var i:integer;
begin
Result:=Str+Separator;
if Length(Result)=0 then exit;
for i:=2 to Num do Delete(Result,1,Pos(Separator,Result)+Length(Separator)-1);
Result:=Copy(Result,1,Pos(Separator,Result)-Length(Separator));
end;

может, поможет?



Фэ   (2002-01-16 21:14) [23]

To Ghost!
Еще чего доброго ты потребуешь моральной и материальной компенсации за причиненный ущерб при использовании моих кусков кода в своей чрезвычайно коммерческой программе.
Нет уж милый - увидеть за, возможно синтаксическими описками
идею, тебе должен позволить твой программистский ум.
Хотя может и не позволить.
Описки я признал и поправил, да логика и без правок понятна.
Если же претензии продолжаются, то должен признать, что Вам нужен флейм, а не решения или их варианты.
Желание получить на, часто некорретно поставленные вопросы, куски кода, которые элементарно вставляются под Ваши баттоны - ничего другого мне не напоминают как детское желание сглатывать переваренную отрыжку родителей и надежду, что все спокойно высрется.
Делаю скидку на Ваш малый возраст и неумение еще принимать мир градиентным.
Эту задачку спокойно решит любой начинающий.
Она не требует усилий форума.
Иначе придется признать, что Вы за его гранью.
И давайте закончим эту ветку.



Ghost!   (2002-01-16 21:58) [24]

To: Фэ
Здравствуйте, Фэ! Наверное, Вы правы. Вы далеко не обязаны мне ничем, а описки это ерунда. Никаких притензий у меня к Вам нет, да и не может быть. Кто я для этого такой? Наоборот, я выражаю Вам свою большую признательность. Дело в том, что я мог решить эту задачу и до форума, но код был крайне нерацоинален, он занимал несколько десятков строк. Поэтому мне стало интересно, как поступают настоящии мастера и Вы это мне наглядно продемонстрировали. Вы считаете, что я особенно признателен людям за кусочки кода, из-за того, что бездумно и неосмыслено вставляю их в свои программы? Что ж, может Вы и правы, но прежде я стараюсь понять весь алгоритм, а потом уже компоновать его со своей программой. Часто приходится вносить изменения , при этом приходится ещё глубже вдумываться в код. Если я чем-либо задел Вас или ещё кого, прошу прощения. БЛАГОДАРЮ ФЭ И ВСЕХ ОСТАЛЬНЫХ ЗА БОЛЬШУЮ ПОМОЩЬ!!!



Фэ   (2002-01-16 22:10) [25]

Ок.
Снимаю резкий тон и до встречь.
В Вас кое-что уже есть, в отличии от некоторых.




Форум: "Потрепаться";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.03.04;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.77 MB
Время: 0.023 c
14-9283           BJValentine           2002-01-17 20:05  2002.03.04  
Excel + Delphi=...


3-9097            vopros                2002-02-06 10:45  2002.03.04  
надо показать из базы сумму по некоторым полям...


1-9175            Dimedrol              2002-02-12 13:10  2002.03.04  
Stay on top v.s. MessageDlg ?!


3-9047            iXANiA                2002-02-05 18:44  2002.03.04  
Как отфильтровать таблицу...


1-9102            &#1057;_&#  2002-02-13 16:20  2002.03.04  
Нужна Помощь HELP!!!!