Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.048 c
14-1105276978
Vasya.ru
2005-01-09 16:22
2005.01.30
сканирование порта


1-1106213522
aleshap
2005-01-20 12:32
2005.01.30
Директория


1-1106219675
Alcogol
2005-01-20 14:14
2005.01.30
левая панель


3-1103802934
ShotGuN
2004-12-23 14:55
2005.01.30
Как добавить несколько строк одновременно?


14-1105553691
GanibalLector
2005-01-12 21:14
2005.01.30
Открытое письмо болельщиков ФК "Металлист"





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский