Toon posts:

[Delphi]karakters zoeken in string en optellen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig een file vanuit een memobox om te zetten naar een stringgrid formaat file en de file op te splitsen. Ik ben al aardig ver gekomen, maar blijf hangen als ik in de textfile wil zoeken naar komma`s en deze komma`s wil ik vervolgens bij elkaar optellen.
Dit is omdat ik wil weten hoelang een bepaald gedeelte van de string is en toevallig komen hier altijd komma`s in voor en niet in de rest van de string, daarom leek me dit wel een goede oplossing.
Ik kom hier niet uit.
Zou iemand mij hierbij kunnen helpen?

BVD,

Huib

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Ik snap je posting niet.

Wat verwacht je bijvoorbeeld als uitkomst van het optellen van komma's? Want ik kan me daar niets bij voorstellen.

Als je wat helderder formuleert kunnen wij beter meedenken.

Siditamentis astuentis pactum.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:00

Creepy

Tactical Espionage Splatterer

WAt heb je dan precies geprobeerd? Wat lukte er niet? Wat krijg je nu en hoe verschild dat met de situatie die je wilt hebben? Heb je wat voorbeeld code van wat je nu hebt? Need more input :)
Zie ook P&W FAQ - De "quickstart".

Delphi heeft een hele mooie help met daarin alle functies/methods e.d. netjes uitgelegd. Bij het onderdeel "String functions" ga je een aantal zaken vinden die je kunnen helpen :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
De bedoeling van het optellen van komma`s is om er achter te komen hoevaak een loop moet runnen om vervolgens precies te stoppen na het aantal (wat is uitgerekend bij het totaal aantal komma`s).
Als hij precies daar is gestopt, dan kan ik de string vanuit daar precies het overige uitlezen, waardoor ik niet moeilijk hoef te werken met tekens die niet werken. Want ik zou dan moeten zoeken in de totale string naar D..* De puntjes staan voor 2 willekeurige getallen. Het zoeken hiernaar lukte niet, omdat ie het ziet als string ofzo. Zo zoek ik naar bijv. een * :
StringGrid1.Cells[num,2] := StrKarakter('', '*');

Ik hoop dat het zo iets duidelijker is.

gr Huib

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik kan er geen touw aan vast knopen, maar is een regular expression hier niet geschikter voor?

Je zou eens een concreet voorbeeld kunnen geven van de data die je hebt, wat je er mee wil doen en wat je als "uitkomst" of resultaat wil hebben.

[ Voor 45% gewijzigd door RobIII op 01-12-2005 12:06 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 08:00

Creepy

Tactical Espionage Splatterer

Je wilt dus komma's tellen in een string? Pak een for loop, loop over de string en tel elke komma?

Of wil je loopen totdat er geen komma meer is? Zoek de eerste komma (hint: pos()) verwerk je data tot aan de komma en verwijder alles tot en met de komma (delete()) en start opnieuw totdat je geen komma meer tegekomt.

Of ik snap je probleem nog steeds niet.....

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

RobIII schreef op donderdag 01 december 2005 @ 12:05:
Ik kan er geen touw aan vast knopen, maar is een regular expression hier niet geschikter voor?
Regexps zitten AFAIK niet standaard in Delphi, dus dat betekent dat hij extra libs moet includen. Op zich niet zo'n probleem, maar het is natuurlijk ook vrij simpel opgelost zonder RE's:

Pseudocode:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure VulStringGridUitMemo(var StringGrid: TStringGrid, var Memo: TMemo)
var
  i, j, kolom: integer;
begin
  kolom := 0;
  for i := 0 to Memo.Lines.Count - 1 do
  begin
    for j := 0 to Memo.Lines[i].Length do
    begin
      if Memo.Lines[i][j] = ',' then
        inc(kolom);
      else
        StringGrid.Lines[i].Colums[kolom] := StringGrid.Lines[i].Colums[kolom] + Memo.Lines[i][j];
    end;
  end;
end;

Uiteraard werkt deze code niet zomaar in Delphi (ik heb allang geen Delphi meer gebruikt :P), maar dit geeft wel ongeveer een idee hoe je het aan kan pakken. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Knutselsmurf
  • Registratie: December 2000
  • Laatst online: 09:09

Knutselsmurf

LED's make things better

* Knutselsmurf ziet 'files' en 'komma' en denkt direct aan CSV-bestanden
Als dat het geval is, kan je eens kijken naar de TStringlist-class. En dan met name de CommaText-property.

- This line is intentionally left blank -

Pagina: 1