Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизРазбиение текста Найти похожие ветки
← →
Newby (2005-01-18 10:15) [0]Вообщем есть текст типа (Hiall gohome stfuok) нужно зделать так, чтобы он был разбит на (Hiall), (gohome) и (stfuok), но пробелов между словами может любое кол-во..
Пробовал зделать с Copy, но там нужно знать скока будет пробелов.
← →
Александр Иванов © (2005-01-18 10:19) [1]http://delphimaster.net/view/1-1105425565/
← →
Александр Иванов © (2005-01-18 10:21) [2]Вам больше подойдет идея Семена Сорокина ©
← →
PVOzerski © (2005-01-18 10:38) [3]вот тупой, не самый быстрый, но наглядный и эффективный путь.
Сейчас написал, проверил, вроде работает. Можешь еще добавить обработку ситуаций, когда new не срабатывает из-за нехватки памяти, конечно :^) Или переделать на tStringList, что еще лучше.
type
pWord=^tWord;
tWord=record
next:pWord;
w:string;
end;
function Split(s:string):pWord;
var
ww:pWord;
i:integer;
afterspace:boolean;
begin
Result:=nil;
afterspace:=true;
for i:=1 to length(s)do
if s[i]>" "then //ну, или s[i]=" ", или s[i]in[ #9," "] - см. сам
begin
if afterspace then
begin
ww:=Result;
new(Result);
Result.next:=ww;
Result.w:=s[i];
afterspace:=false;
end
else
Result.w:=Result.w+s[i];
end
else
afterspace:=true;
end;
← →
Kerk © (2005-01-18 10:39) [4]Сабж смахивает на лабу с первого курса. Народ думать не хочет. :(
← →
Newby (2005-01-18 15:29) [5]2 Александр
Иванов ссылка битая вроде...
2 PVOzerski
да забыл сказать, что код должен быть простым и наиболее быстро выполняемым, всёравно попробую.. thx..
2 Kerk
Ты ошибаешся,если интересно то я делаю клиента для WinLirc(программа которая ловит сигналы от самодельных ИК-портов). Вообще это моя первая программа за последнии 2 года(на делфи), но так как ничего подходящего ненашёл пришлось самому делать.
Буду рад помощи, а то порт уже как месяц собрал, а использовать могу тока в плэерах поддерживающих его =(
← →
Александр Иванов © (2005-01-18 15:55) [6]Newby (18.01.05 15:29) [5]
Семен Сорокин © (11.01.05 10:31) [6]
во еще вариант на рассмотрение :))
var
_text: string;
_i: integer;
begin
with TStringList.Create do
try
Delimiter := " ";
DelimitedText := _text;
_text := EmptyStr;
for _i := 0 to Count-1 do
if Length(_text) < Length(Trim(Strings[_i])) then
_text := Trim(Strings[_i])
finally
Free
end
end;
В данном случае цикл по строкам просто лишний.
← →
default © (2005-01-18 17:12) [7]
function StrDivParts(const S: String): TStrings;
var
i, j: Cardinal;
f: Boolean;
begin
Result := TStringList.Create;
j := 0;
f := False;
for i := 1 to Length(S) do
if S[i] <> " " then begin
Inc(j);
f:= True
end else if f then begin
Result.Add(Copy(S, i - j, j));
j := 0;
f := False
end;
if S[Length(S)] <> " " then Result.Add(Copy(S, i - j, j))
end;
или так
← →
Newby (2005-01-20 10:35) [8]Спасибо всем кто решил помоч
но забыл сказать, что в тексте будет наподобии такого:
VOL+ EXEC "C:\Program Files\Winamp\winamp.exe"
нужно получить
VOL+,
EXEC,
"C:\Program Files\Winamp\winamp.exe"
но в указании пути тоже есть пробел, я хз что делать...
Как вообще строят такие программы которые читают подобные конфиги..
← →
Alexander Panov © (2005-01-20 10:36) [9]Newby (20.01.05 10:35) [8]
но в указании пути тоже есть пробел, я хз что делать...
Головой думать.
← →
REA (2005-01-20 10:40) [10]Кавычечки там есть.
А вообще надо прикрывать темы с пробелами или статью писать "Пробелы и как с ними бороться"
← →
Newby (2005-01-20 11:03) [11]Alexander Panov
Нелюблю флуд и невнимательных людей, я уже выше написал что программистом небыл, и быть несобираюсь.. но нужда заставила написать такую вот прогу...
← →
WinLamka © (2005-01-20 11:04) [12]TParser
← →
Alexander Panov © (2005-01-20 11:11) [13]Newby (20.01.05 11:03) [11]
Нелюблю флуд и невнимательных людей, я уже выше написал что программистом небыл, и быть несобираюсь.. но нужда заставила написать такую вот прогу...
т.е. ты полностью предлагаешь реализовать за тебя задачу, палец о палец не ударив?
Ну так это называется договор о выполнении работ.
заказчик, подрядчик, и пр., и т.п.
← →
Newby (2005-01-20 11:22) [14]Ну если тебе интересно программа состоит не только из этой функции... я попросил помощи так как идти некуда больше.. конкретно тебе я вообще ни очём непросил... так что ненадо тут флудить... тем более несмешно, если хочешь показать что ты умнее чем кажешся помоги и не нужно строить из себя неизвестно кого...
← →
Alexander Panov © (2005-01-20 11:24) [15]Newby (20.01.05 11:22) [14]
Ну если тебе интересно программа состоит не только из этой функции... я попросил помощи так как идти некуда больше.. конкретно тебе я вообще ни очём непросил... так что ненадо тут флудить... тем более несмешно, если хочешь показать что ты умнее чем кажешся помоги и не нужно строить из себя неизвестно кого...
Я тоже не люблю флуд.
Вижу, что у тебя запарка жуткая, и некогда изменить код, который уже дали, добавиви пару строк...
← →
Newby (2005-01-20 11:34) [16]хм добавить пару строк у тебя нет времени, а вот вести темы на то какой я нуб и что я вообще здесь делаю(т.е флудить) у тебя есть время... так?
← →
Alexander Panov © (2005-01-20 11:37) [17]Newby (20.01.05 11:34) [16]
хм добавить пару строк у тебя нет времени, а вот вести темы на то какой я нуб и что я вообще здесь делаю(т.е флудить) у тебя есть время... так?
Так лень добавлять. Неинтересно... Я такие вещи десяток раз писал уже - реализация алгоритма занимает от 5 до 20 минут. А вот поговорить настроение есть. Да и тебе польза - ветка плавает. Только вот модераторы могут перенести в потрепаться или удалить за оффтопик. Так это мелочи по сравнению с удовольствием от общения;)
← →
Alexander Panov © (2005-01-20 11:46) [18]В принципе, реализация заняла 7 минут.
procedure ProcessString(const Src: String; var tL: TStringList);
var
i,pz: Integer;
s: String;
begin
s := Src;
while s<>"" do
begin
pz := Pos(" ",s);
if pz>0 then tL.Add(Trim(Copy(s,1,pz-1)))
else
begin
tL.Add(Trim(s));
Exit;
end;
Delete(s,1,pz);
end;
end;
← →
Separator © (2005-01-20 12:50) [19]Вот ещё мой код тут можно посмотреть:
http://delphibase.endimus.ru/?action=viewfunc&topic=strchange&id=10352
← →
Newby (2005-01-20 13:21) [20]Alexander Panov ты вообще проверял свою процедуру, вылетает ошибка....
← →
Alex_Bredin © (2005-01-20 13:48) [21]все делается одной строкой
StringList.CommaText := твоя строка
← →
Alexander Panov © (2005-01-20 13:54) [22]Newby (20.01.05 13:21) [20]
Alexander Panov ты вообще проверял свою процедуру, вылетает ошибка....
Проверял. У меня нет ошибки в процедуре.
Можзет быть, у тебя в коде вызова ошибка?
← →
Knight © (2005-01-20 14:46) [23]А чем это не устраивает?
Memo1.Lines.Delimiter:=" ";
Memo1.Lines.DelimitedText:=Edit1.Text;
← →
Separator © (2005-01-20 15:11) [24]//Knight © (20.01.05 14:46) [23]
А если разделитель не только пробел?
← →
Knight © (2005-01-20 15:16) [25]
> Separator © (20.01.05 15:11) [24]
> //Knight © (20.01.05 14:46) [23]
> А если разделитель не только пробел?
А кто тебе мешает перегнать это в функцию и передать в неё нужный разделитель?
← →
Newby (2005-01-20 15:24) [26]Knight
вот то что я искал, я знал что есть что то такое, из раздела стандартного, полность удовлетворяет моим требованиям и имеет более быструю скорость... спасибо..
← →
Knight © (2005-01-20 15:27) [27]
> Newby (20.01.05 15:24) [26]
Эт Борланду спасибо... %)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.039 c