Главная страница
    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.48 MB
Время: 0.006 c
1-94416
ListView
2002-04-17 19:42
2002.04.29
Как в ЛистВиеве при щелчке на каком нибуть итемсе получить егоимя


3-94336
Black-Grin
2002-04-05 22:35
2002.04.29
Delphi 5,6 + Mysql


3-94280
kserg@ukr.net
2002-04-08 14:25
2002.04.29
-какой тип данных лучше подходит для хранения TEXT-данных


1-94440
Sound
2002-04-15 22:49
2002.04.29
Елементарный вопрос


6-94535
Yuraz
2002-01-18 17:00
2002.04.29
Как отправить поля POST NMHTTP





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