Форум: "Потрепаться";
Текущий архив: 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