Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];
ВнизЧто я делаю не так? Найти похожие ветки
← →
Ross (2002-04-15 19:58) [0]Здравствуйте. Вот код для чтения пословно, который я использую:
procedure TForm1.Button1Click(Sender: TObject);
var
i,n:integer;
s:string;
begin
n:= WordCount(Memo3.Lines.Text,[#13, " ",".",",",":",";"]); // Вот здесь наверное ошибка
for i:=1 to n-1 do
begin
s:= ExtractWord(i,Memo3.Lines.Text, [#13, " ",".",",",":",";"]); // И здесь
Table1.Findkey([s]);
Memo2.Lines.Add(Table1.Fields[1].text+" - "+Table1.Fields[2].text);
end;
end;
Все работает прекрасно, но если текст в Memo3 начинается с новой строки, или если в самом конце текста нет никакого символа, то получается читать только первую строку или до предпоследнего слова.. Я догадываюсь что не поставил еще несколько символов... Помогите.
P.S. Я использовал функции ExtractWord, WordCount и WordPosition из RXLib.
← →
kull (2002-04-15 21:27) [1]А почему for i:=1 to n-1 а не:
i:=0 to n-1
или
i:=1 to n
может здесь ошибка?
← →
Ross (2002-04-16 10:54) [2]Нет (я так думаю), мне наверное нужно в символах типа TCharSet-WordDelims функции ExtractWord (a)добавить переход каретки, (в) Переместить курсор в конце текста и добавить какой нибудь символ, пробел, точку или запятую... Но как? #13 не идет...
← →
Ross (2002-04-16 10:56) [3]to kull ©
for i:=1 to n-1 do наверное потому что результат WordCount начинается с 1. Если я не прав, поправьте.
← →
Johnmen (2002-04-16 11:02) [4]Добавь #10
← →
Ross (2002-04-16 12:42) [5]to Johnmen ©
Если #13+#10 или "#13+#10" то ошибка: Incompatible integer and char, eсли #13,#10 то не получается... Попробовал все знакомые мне варианты: ничего.
← →
MBo (2002-04-16 12:49) [6]#13#10
← →
Ross (2002-04-16 12:58) [7]to MBo ©
НЕ ИДЕТ: Incompatible integer and char
← →
Anatoly Podgoretsky (2002-04-16 13:04) [8]Приведи код
← →
Alx2 (2002-04-16 13:22) [9]
Const ValidSet = ["a".."z", "A".."Z", "а".."я", "А".."Я", "0".."9"];
Var S, SS: String;
K, len, Start: Integer;
Begin
S := Memo3.Text;
len := Length(S);
K := 1;
While K <= len Do
Begin
While (K <= len) And (Not (S[K] In ValidSet)) Do inc(K);
Start := K;
If Start > len Then break;
inc(K);
While (K <= len) And (S[K] In ValidSet) Do inc(K);
SS :=Copy(S, Start, K - Start);
Table1.Findkey([SS]);
Memo2.Lines.Add(Table1.Fields[1].text+" - "+Table1.Fields[2].text);
End;
End;
← →
Johnmen (2002-04-16 13:40) [10]Ну нельзя же так тормозить...:)
[#13,#10,, " ",".",",",":",";"]);
← →
kull (2002-04-16 14:17) [11]
>Ross © (16.04.02 10:56)
> for i:=1 to n-1 do наверное потому что результат WordCount
> начинается с 1. Если я не прав, поправьте.
Начинается то он с 1 а заканчивается чем? Не n ли.
← →
Ross (2002-04-16 14:26) [12]to Alx2:
Огромное спасибо. Код данный вами прекрасно работает. Еще раз спасибо.
To All:
Но все-таки, ради интереса, если использовать мою версию кода, почему не работает? Привожу полностью:
function WordCount(const s: string;
const WordDelims: TCharSet):integer;
var
Slen,i:cardinal;
begin
Result:=0;
i:=1;
Slen:=Length(s);
While i<=Slen do
begin
While (i<=Slen) and (s[i] in Worddelims) do Inc(i);
If i<=Slen then inc(result);
While (i<=Slen) and not (s[i] in Worddelims) do Inc(i);
end;
end;
function WordPosition(const N: Integer; const S: string;
const WordDelims: TCharSet): Integer;
var
Count, I: Integer;
begin
Count := 0;
I := 1;
Result := 0;
while (I <= Length(S)) and (Count <> N) do begin
while (I <= Length(S)) and (S[I] in WordDelims) do Inc(I);
if I <= Length(S) then Inc(Count);
if Count <> N then
while (I <= Length(S)) and not (S[I] in WordDelims) do Inc(I)
else Result := I;
end;
end;
function ExtractWord(N: Integer; const S: string;
const WordDelims: TCharSet): string;
var
I: Integer;
Len: Integer;
begin
Len := 0;
I := WordPosition(N, S, WordDelims);
if I <> 0 then
while (I <= Length(S)) and not(S[I] in WordDelims) do begin
Inc(Len);
SetLength(Result, Len);
Result[Len] := S[I];
Inc(I);
end;
SetLength(Result, Len);
end;
procedure TForm1.ToolButton1Click(Sender: TObject);
var
i,n:integer;
s:string;
begin
n:= WordCount(Memo3.Lines.Text,[#13#10," ",".",",",":",";"]);
pb.Min:=0;
pb.Position:=0;
pb.Max:=n;
for i:=1 to n-1 do
begin
s:= ExtractWord(i,Memo3.Lines.Text, [#13#10," ",".",",",":",";"]);
if Table1.Findkey([s])=true then
begin
Memo2.Lines.Add(Table1.Fields[1].text+" - "+Table1.Fields[2].text);
end
else
if Table1.Findkey([s])=false then
begin
Memo2.Lines.Add(s +" - ошибка");
end;
pb.Position:=i;
end;
pb.Position:=0;
end;
pb-это ПрогрессБар
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c