Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Разбиение текста [D7, WinXP]


Страницы:   1 2

Newby ©   (2005-01-18 10:15:00) 

Вообщем есть текст типа (Hiall   gohome   stfuok) нужно зделать так, чтобы он был разбит на (Hiall), (gohome) и (stfuok), но пробелов между словами может любое кол-во..
Пробовал зделать с Copy, но там нужно знать скока будет пробелов.


default   (2005-01-18 17:12:00) [21]


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;

или так


Александр Иванов   (2005-01-18 15:55:00) [22]

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;

В данном случае цикл по строкам просто лишний.


Newby   (2005-01-18 15:29:00) [23]

2 Александр
Иванов ссылка битая вроде...

2 PVOzerski
да забыл сказать, что код должен быть простым и наиболее быстро выполняемым, всёравно попробую.. thx..

2 Kerk
Ты ошибаешся,если интересно то я делаю клиента для WinLirc(программа которая ловит сигналы от самодельных ИК-портов). Вообще это моя первая программа за последнии 2 года(на делфи), но так как ничего подходящего ненашёл пришлось самому делать.

Буду рад помощи, а то порт уже как месяц собрал, а использовать могу тока в плэерах поддерживающих его =(


Kerk   (2005-01-18 10:39:00) [24]

Сабж смахивает на лабу с первого курса. Народ думать не хочет. :(


PVOzerski   (2005-01-18 10:38:00) [25]

вот тупой, не самый быстрый, но наглядный и эффективный путь.
Сейчас написал, проверил, вроде работает. Можешь еще добавить обработку ситуаций, когда 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;


Александр Иванов   (2005-01-18 10:21:00) [26]

Вам больше подойдет идея Семена Сорокина ©


Александр Иванов   (2005-01-18 10:19:00) [27]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1105425565&n=0


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо