Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

Разбиение текста   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.036 c
1-1105397600
Паша555
2005-01-11 01:53
2005.01.30
Мерцание и Двойная Буферизация


1-1106132278
denis24
2005-01-19 13:57
2005.01.30
закрытие формы по ESC


3-1104143196
CRACKISH
2004-12-27 13:26
2005.01.30
Добавление в базу!


1-1105891816
KristinA
2005-01-16 19:10
2005.01.30
Delphi vikidivat tabli4ku "Bitmap image is not valid."


6-1099864447
Роман
2004-11-08 00:54
2005.01.30
Траффик и дозвон.