Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.85 MB
Время: 0.044 c
1-94392
volodya_
2002-04-17 17:53
2002.04.29
Help


3-94295
anton_private
2002-04-08 14:03
2002.04.29
Как получить список MS SQL серверов в сети?


1-94423
Cancer
2002-04-16 10:57
2002.04.29
UpdateResource. А как в Win9x редактировать ресурсы?


1-94488
MVova
2002-04-15 13:57
2002.04.29
Точка входа в функцию


4-94615
Nigth
2002-02-21 00:24
2002.04.29
Win API





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