Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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]

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



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

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

Наверх





Память: 0.5 MB
Время: 0.005 c
1-9163
Brand
2002-02-11 23:41
2002.03.04
Завершение Windows


1-9170
ProstoChaynik
2002-02-14 09:25
2002.03.04
цвет TButton


14-9293
ABCDE
2002-01-16 12:07
2002.03.04
Про Аську


3-9090
veronika
2002-02-07 12:00
2002.03.04
вопрос


14-9276
VEG
2002-01-16 23:05
2002.03.04
Народ!!! Как можно качнуть всю инфу с картриджа 8 и 16 битных приставок???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский