Форум: "Основная";
Текущий архив: 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.038 c