Avatar billede nidyahou Praktikant
07. februar 2004 - 16:04 Der er 6 kommentarer og
1 løsning

tæl tegn i memo1

min kode er som følger:

const
genstandtael: set of Char = ['|'];
var
I: Integer;
genstande: Integer;
begin
  genstande := 0;
  for I := 1 to Length(Memo1) do
  begin
    if UpperCase(Memo1)[I] in genstandtael then
    begin
      genstande := genstande + 1;
    end;
  end;
ShowMessage(IntToStr(genstande));

problemet er at den ikke kan "finde" Memo1... den ved simpelthen ikke hvad Memo1 indeholder, altså udskriver den 0 også selvom jeg har sat Memo1 til at indeholde 3 |'er
Avatar billede hrc Mester
07. februar 2004 - 16:29 #1
var
  Count : integer;
  st : string;
begin
  Count := 0;
  st := Memo1.Text; // Might add UpperCase()
  for i := 1 to length(st) do
    if st[i] = '|' then
      inc(Count); // More hack'ish: inc(Count,integer(st[i] = '|'));
  result := Count + 3;
end;

I dit eksempel bruger du length forkert. Den korrekte måde er length(Memo1.Text). Dernæst kalder du UpperCase ligeså mange gange som teksten er lang - det er ineffektivt. Desuden søger du efter '|', så det er unødvendigt. Sidst så har du opdaget set's - og det er også fint nok - bare ikke her.
Avatar billede nidyahou Praktikant
07. februar 2004 - 17:00 #2
koden der er spækket med fejl, prøv lige selv at tjekke den igennem
Avatar billede nidyahou Praktikant
07. februar 2004 - 17:20 #3
de fejl jeg får efter at have rettet lidt er:
For loop control variable must have ordinal type
Undeclared identifier: 'i'
Avatar billede hrc Mester
07. februar 2004 - 19:25 #4
Gu er min kode ikke fuld af fejl! Det eneste der manglede var en variabel ved navn 'i' (har testet det).

function TForm1.CountDelimiters : integer;
var
  i, Count : integer;
  st : string;
begin
  Count := 0;
  st := Memo1.Text; // Might add UpperCase()
  for i := 1 to length(st) do
    if st[i] = '|' then
      inc(Count);
  result := Count + 3;
end;

eller nørdens variant:

function TForm1.CountDelimiters : integer;
var
  i, Count : integer;
  st : string;
begin
  Count := 0;
  st := Memo1.Text; // Might add UpperCase()
  for i := 1 to length(st) do
    inc(Count,integer(st[i] = '|'));
  result := Count + 3;
end;
Avatar billede hrc Mester
07. februar 2004 - 19:29 #5
Har du kopieret koden eller skrev du den af? Jeg kopierede, lavede en funktion, pastede koden ind og tilføjede et i - og så virkede det.
Avatar billede nidyahou Praktikant
07. februar 2004 - 22:43 #6
my bad... hvordan får jeg så vist antallet i fx ShowMessage... den melder at den ikke kan bruge Integer or String sammen
Avatar billede nidyahou Praktikant
08. februar 2004 - 11:13 #7
tak for svaret har fundet ud af det nu :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester