Avatar billede roz Nybegynder
27. januar 2005 - 23:37 Der er 3 kommentarer og
1 løsning

Finde antal ord og punktummer

Hvordan finder jeg antal ord i en string (en Memo eller richedit eller lignenden)?

Hvordan finder jeg antal punktummer i en string (en Memo eller richedit eller lignenden)?

Hvordan finder jeg antal ord der indeholder flere bogstaver end f.eks. 5 i en string (en Memo eller richedit eller lignenden)?

30 Point til hver spørgsmål!
Avatar billede slowaterz Nybegynder
28. januar 2005 - 07:15 #1
Antal ord i en streng :

function WordsInText(s_text: String): Integer;
var
  i_pos: Integer; // Position of search pattern in string
  i_count: Integer; // Counter
  s_temp: String; // Temporary workstring
begin
  s_temp := Trim(s_text);
  repeat
    i_pos := Pos(' ', s_temp);
    if i_pos > 0 then
    begin
      Inc(i_count);
      s_temp := Trim(Copy(s_temp, i_pos + 1, Length(s_temp) - i_pos);
    end  // if i_pos > 0
    else
    begin
      Inc(i_count);
    end; // else
  until (i_pos = 0);
  result := i_count;
end; // WordsInText

Eksempel : i_NumberOfWords := WordsInText(Memo.Text);




Antal punktummer :

function PeriodesInText(s_text: String): Integer;
var
  i_pos: Integer; // Position of search pattern in string
  i_count: Integer; // Counter
  s_temp: String; // Temporary workstring
begin
  s_temp := Trim(s_text);
  repeat
    i_pos := Pos('.', s_temp);
    if i_pos > 0 then
    begin
      Inc(i_count);
      s_temp := Trim(Copy(s_temp, i_pos + 1, Length(s_temp) - i_pos);
    end  // if i_pos > 0
    else
    begin
      Inc(i_count);
    end; // else
  until (i_pos = 0);
  result := i_count;
end; // PeriodesInText

Eksempel : i_NumperOfPeriodes := PeriodesInText(Memo.Text);




Antal ord med 5 tegn eller flere i en streng :

function LongWordsInText(s_text: String; i_length: Integer): Integer;
var
  i_pos: Integer; // Position of search pattern in string
  i_count: Integer; // Counter
  s_temp: String; // Temporary workstring
begin
  s_temp := Trim(s_text);
  repeat
    i_pos := Pos(' ', s_temp);
    if i_pos > 0 then
    begin
      if i_pos > i_length then
      begin
        Inc(i_count);
      end; // if i_pos > i_length
      s_temp := Trim(Copy(s_temp, i_pos + 1, Length(s_temp) - i_pos);
    end  // if i_pos > 0
    else
    begin
      if PeriodesInText(s_temp) > 0 then
      begin
        if Length(s_temp) > i_length then
        begin
          Inc(i_count);
        end; // if Length(s_temp) > i_length
      end  // if PeriodesInText(s_temp) > 0
      else
      begin
        if Length(s_temp) >= i_length then
        begin
          Inc(i_count);
        end; // if Length(s_temp) >= i_length
      end; // else
    end; // else
  until (i_pos = 0);
  result := i_count;
end; // LongWordsInText

Eksempel : i_NumberOfLongWords := LongWordsInText(Memo.Text, 5);
Avatar billede slowaterz Nybegynder
28. januar 2005 - 07:31 #2
Der har sneget sig en fejl ind i PeriodesInText funktionen (sådan går det, når man bare kopierer den forrige funktion blindt)


function PeriodesInText(s_text: String): Integer;
var
  i_pos: Integer; // Position of search pattern in string
  i_count: Integer; // Counter
  s_temp: String; // Temporary workstring
begin
  s_temp := Trim(s_text);
  repeat
    i_pos := Pos('.', s_temp);
    if i_pos > 0 then
    begin
      Inc(i_count);
      s_temp := Trim(Copy(s_temp, i_pos + 1, Length(s_temp) - i_pos);
    end; // if i_pos > 0
  until (i_pos = 0);
  result := i_count;
end; // PeriodesInText


Sorry ...
Avatar billede doc404 Novice
28. januar 2005 - 10:53 #3
Eller en der laver det hele... ;-)

procedure CountIt(const Text : string; var NumWords,NumDots,NumBigWords : integer);
var
  p : PChar;
  WordSize : integer;
begin
  NumWords := 0;
  NumDots := 0;
  NumBigWords := 0;
  p := PChar(Text);
  while p^ <> #00 do
  begin
    while p^ in [' ',#9] do Inc(p); // skip white space
    case p^ of
      '.' : begin
              Inc(NumDots);
              Inc(p);
            end;
      #10,#13 : Inc(p);
      #0  : Break;
    else
        WordSize := 0;
        while not (p^ in [' ','.',#9,#0]) do
        begin
          Inc(p);
          Inc(WordSize);
        end;
        Inc(NumWords);
        if WordSize > 5 then
          Inc(NumBigWords);
    end;
  end;
end;
Avatar billede doc404 Novice
28. januar 2005 - 10:54 #4
ps: casen med #10,#13 er for at undgå at tælle linieskift med som ord.

Men der er mange muligheder for smukkesering...
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