Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
denis24   (2004-10-22 09:41) [0]

В сабже использую строку с эдита.Смотрю в дебугере ,там идет строка "1,2,3"
В цикле
while i<=Length(t)+1 do
   begin
   c:=t[i];
       .
       .
       .
Первый символ этой строки "#0".Почему?


 
Johnmen ©   (2004-10-22 09:56) [1]

Потому, что
1. Надо читать внимательно хелп. По string.
2. Надо задавать вопросы, не приводя общипанный кусок кода, а реальный полны код.


 
denis24   (2004-10-22 10:31) [2]

StringToWords(edit1.Text),Words);

procedure StringToWords(const T:String;const List:Tstrings=nil);
var
i:integer;
s:string;
c:Char;
begin              
i:=0;
s:="";
if t>"" then
 begin
 while i<=Length(t)+1 do
   begin
   c:=t[i];
         if c<>","  then s:=s+c
         else  then Check;

   i:=i+1;
   end;
 end;
end;

procedure Check();
begin
if (s<>"") then
begin
       if List<>nil then List.Add(S);
end;

s:="";
end;


 
П7   (2004-10-22 10:38) [3]

i := 1;

Символы в строке начитаются с 1 индекса...


 
Rem ©   (2004-10-22 10:38) [4]

procedure StringToWords(const T: string; const List: TStrings = nil);
begin
 if Assigned(List) then
 begin
   List.Delimiter := ",";
   List.DelimitedText := T;
 end;
end;


 
П7   (2004-10-22 10:42) [5]

Я использую вот такую не хитрую функцию, которая не зависит от всяких там левых модулей. Не быстро, но для моих целей очень удобно, каждый раз возвращает один кусок ДО разделителя и обрезает в основном тексте этот кусок и разделитель.

function SplitString( sub : string; var str : string ) : string;
var
 res : string;
 cnt : integer;
 sl : integer;
begin
 cnt := Pos( sub, str );
 sl := Length( sub );
 if cnt > 0 then
 begin
   if sl > 1 then
     res := "";
   res := copy( str, 1, cnt - sl );
   str := copy( str, cnt + sl, Length( str ) - ( cnt - sl - 1) );
 end
 else
 begin
   res := str;
   str := "";
 end;
 Result := res;
end;


 
denis24   (2004-10-22 11:07) [6]

Спасибо  to REM
Еще вопрос.Как организовать удаление повторяющихся значений в заполняемом таким образом srtingList.


 
Symb   (2004-10-22 11:28) [7]

В StringList не нужно ничего удалять. Просто перед заполнением у него надо выставить свойство Sorted в true, а Duplicates в dupIgnore. Тогда дублирующиеся строки он просто не будет добавлять.


 
denis24   (2004-10-24 17:02) [8]

Почему если я делаю сабж
procedure StringToWords(const T: string; const List: TStringlist = nil);
begin
if Assigned(List) then
begin

  List.Delimiter := ";";
  List.DelimitedText := T;

end;
end;
Мне побел между словами тоже воспринимает за символ-разделитель и соответственно разделяет на слова?


 
Yuri-7   (2004-10-24 23:20) [9]

strings.CommaText:=Edit1.Text; и в Strings - все слова.


 
ЮЮ ©   (2004-10-25 03:41) [10]

потому что " " является вторым Delimiter-ом в коде
procedure TStrings.SetDelimitedText(const Value: string);

while (P^ > " ") and (P^ <> Delimiter) do
 {$IFDEF MSWINDOWS}
   P := CharNext(P);
 {$ELSE}
   Inc(P);
 {$ENDIF}
SetString(S, P1, P - P1);

т.е. "нарвавшись" на пробел мы, похоже, получаем новый элемент в списке



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
3-1097112092
Tatyana
2004-10-07 05:21
2004.11.07
jpg и база данных


10-1057319481
Bor
2003-07-04 15:51
2004.11.07
При вызове orb->resolve_initial_references возникает искл.


1-1098562792
redlord
2004-10-24 00:19
2004.11.07
opendialog+multiselect


4-1096617499
Expl
2004-10-01 11:58
2004.11.07
Как заюзать библиотеку?


1-1098387808
oleg_
2004-10-21 23:43
2004.11.07
dll





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