Page 1 of 2 1 2 LastLast
Results 1 to 15 of 21

Thread: Teken tellen in string

  1. #1

    Teken tellen in string

    Hoe kan ik tellen hoevaak een bepaald teken voorkomt ?

    Met (Pos(#13, omschr) > 0 ) kan ik wel de positie van een ophalen...

    maar hoe kan ik tellen dus hoevaak bijvoorbeeld 't' voorkomt in de string 't is wat t proberen te tellen' daar moet dus 5 uit komen...

    Is hier een specifieke functie voor?

  2. #2
    Senior Member Woep's Avatar
    Join Date
    Jan 2004
    Location
    Zeeland
    Posts
    115
    forlus doen over die string en dan

    if string[teller] = 't' then

    oid
    Oops

  3. #3
    ok met string[2] krijg je dus het 2de teken

  4. #4
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    ja.. een string is niet zero-based, dus string[2] geeft inderdaad het 2e teken
    !

  5. #5
    Ja, zoiets als dit werkt:

    Code:
    function TellAantalCharsInString(aString : String): Integer
    begin
      Result := 0;
      while (Pos(#13, omschr) > 0 ) do
      begin
        Inc(Result); 
      end;
    end;
    Ik heb het niet getest maar zal moeten werken. Dus als je die functie aanroept zal hij het aantal '#13' characters blijven tellen zolang deze voorkomt in de string.
    Als het heelal eindig is, waat staat dan het bordje 'Pas op, einde, niet struikelen'?

  6. #6
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    dit zou betekenen dat als er een #13 in de omschr ( waarschijnlijk bedoel je aString ) zit dat de functie dat het programma laat hangen.. misschien handig om de gevonden #13 te verwijderen zodat die niet opnieuw gevonden kan worden?
    !

  7. #7
    tja.. zoeits moet het dan worden :-) .. thnx !

    Had trouwens wel verwacht dat delphi hier een standaard functie voor had.. net zoeits als pos... maar goed doen we het zo :-)

  8. #8
    Je kunt denk ik beter gewoon een for-lus bouwen die loopt van 1 tot Length(AString). Met de teller kun je dan elk teken van de string aflopen:
    Code:
    function CountChars(AString: string; AChar: Char = #13): Integer;
    var
      i: Integer;
    begin
      Result := 0;
      for i := 1to Length(AString) do
        Inc(Result, Ord(AString[i] = AChar));
    end;
    1+1=b

  9. #9
    ben ik nou gek ?! hoe wordt de variabele teruggegeven ?

    Hoeft er geen return bij of zo ?! of zit ik nou te vaak met Java te rotzooien :-(

  10. #10
    hmm wat is het gemakkelijkst om ook nog bij te houden hoeveel tekens er tussen de #13's zitten !?

    Mogen nl. max 60 tussen zitten... als er meer tussen zitten moet dat ook gezien worden als een #13 teken...

    Dus meer dan 60 ertussen en minder dan 120 ook in inc van result...

    En tussen 120 en 180 2 maal een inc van result... etc

  11. #11
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Inc(Result, Ord(AString[i] = AChar));
    !

  12. #12

  13. #13
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    Jip. "Astring[i] = AChar" heeft als resultaat een boolean. True heeft de waarde 1, false heeft de waarde 0. "Ord" zorgt er dus voor dat true wordt omgezet naar 1 en false naar 0. Het gevolg is dat Result dus met 0 of 1 wordt opgehoogd.
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  14. #14
    Dan krijg je iets als dit:
    Code:
    function CountLineBreaks(AString: string): Integer;
    var
      i: Integer;
      LastPos: Integer;
    begin
      Result := 0;
      LastPos := 0;
      for i := 1to Length(AString) do
    if (AString[i] = #13) or (i - LastPos > 60) then
    begin
          LastPos := i;
          Inc(Result);
        end;
    end;
    Het kan zijn dat je LastPos moet initialisren op 1 en dat > 60 moet veranderen in >= 60, maar dat moet je maar even proberen.
    1+1=b

  15. #15
    Werkt niet !!!

    Dit is mijn functie:

    Code:
    function TellAantalCharsInString(aString : String): Integer;
    begin
      Result := 0;
      while (Pos(#13, aString) > 0 ) do
      begin
        Inc(Result);
      end;
    end;
    en zo roep ik hem aan:

    Code:
    aantal_enter:=TellAantalCharsInString(omschr);
    Zodra er een #13 in voor komt hangt ie !!!
    Als dat niet het geval is krijg ik keurig 0...

    Hoe kan het dat ie hangt ?

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. NLDSimpleIniFile
    By Dany in forum NLDDanyUtils
    Replies: 4
    Last Post: 14-Oct-17, 16:45
  2. NLDSimpleRegistry
    By Dany in forum NLDDanyUtils
    Replies: 8
    Last Post: 14-Oct-17, 16:45
  3. NLDRcsStrings
    By Dany in forum NLDDanyUtils
    Replies: 24
    Last Post: 14-Oct-17, 16:41
  4. Version Information opvragen
    By Richard in forum Algemeen
    Replies: 13
    Last Post: 11-Dec-05, 23:06
  5. Grote integers?
    By Tharkis in forum Algemeen
    Replies: 6
    Last Post: 09-Jun-03, 18:52

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •