[delphi5] String Separator

Pagina: 1
Acties:

  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Ik heb een editbox, in deze editbox worden hele getallen getypt gescheiden door een comma. Deze getallen ga ik oppakken en wil ik in een object plaatsen (array? of een ander beter object)

De code ik reeds gemaakt heb maar waar ik niet tevereden over ben is deze:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.Button1Click(Sender: TObject);
var S:string;
    positie:integer;
    selst:integer;
    lengte:integer;
    teller:integer;
    bladnummers: array[1..20,1..1] of integer;
begin

//!!!!!vergeet niet alle spaties weg te halen

S:=trim(edit1.text);
lengte:=length(s);
if S[lengte]<>',' then         // geen komma op het einde
   begin
   S:=S+',';
   lengte:=length(s);
   end;
selst:=0;
teller:=0;

while Pos(',',S)>0 do
   begin
   positie:=Pos(',',S);
    try
    bladnummers[teller+1,1]:=strtoint(Copy(S,selst,positie-1));
    except
    end;
   S:=Copy(S,positie+1,(lengte-positie));
   teller:=teller+1;
   end;

teller:=0;
while teller<20 do
   begin
   showmessage(inttostr(bladnummers[teller+1,1]));
   teller:=teller+1;
   end;
end;


Het geen dat niet werkt is de array, ik neem nu nameljk een maximum van 20 regels maar dit moet flexibel zijn, heeft delphi hier zelf niet een ingebouwde optie voor?

[ Voor 0% gewijzigd door marenk_vos op 30-09-2002 10:28 . Reden: code tags ]

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Gebruik even [ code] en [/ code] tags...

Zoek in jhe help naar dynamic arrays...

Localhost, sweet localhost


  • CyeZ
  • Registratie: September 2001
  • Laatst online: 14:35

CyeZ

Vroem vroem!!!

Kijk eens naar de SetLength procedure (en eventueel de Length functie), daarmee is het mogelijk om arrays van variabele lengte te maken.

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Nog een tip: TStringList.CommaText of de (in D5 undocumented in de Classes unit) ExtractStrings functie splitsen strings op in veel minder regels code

We adore chaos because we like to restore order - M.C. Escher


  • marenk_vos
  • Registratie: Augustus 2001
  • Laatst online: 23-07 13:21
Deze bijgewerkte code geeft in de 2e regel van de try except af en toe een INVALID POINTER OPERATION fout.

Waar kan ik de stringlist ergens vinden?

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
procedure TForm1.Button1Click(Sender: TObject);
var S:string;
    positie:integer;
    selst:integer;
    lengte:integer;
    teller:integer;
    bladnummers: array of integer;
begin

//!!!!!vergeet niet alle spaties weg te halen

S:=trim(edit1.text);
lengte:=length(s);
if S[lengte]<>',' then         // geen komma op het einde
   begin
   S:=S+',';
   lengte:=length(s);
   end;
selst:=0;
teller:=0;

while Pos(',',S)>0 do
   begin
   positie:=Pos(',',S);
    try
    setlength(bladnummers,teller+1);
    bladnummers[teller+1]:=strtoint(Copy(S,selst,positie-1));
    except
    end;
   S:=Copy(S,positie+1,(lengte-positie));
   teller:=teller+1;
   end;

teller:=0;
while teller<high(bladnummers) do
   begin
   showmessage(inttostr(bladnummers[teller+1]));
   teller:=teller+1;
   end;
end;

Dell XPS 17 Intel i7 2630 Nvidia GT555 3Gb Hd1: OCZ Vertex 2 SSD 60 GB Hd2: 500Gb


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

marenk_vos schreef op 30 september 2002 @ 11:05:
Deze bijgewerkte code geeft in de 2e regel van de try except af en toe een INVALID POINTER OPERATION fout.

Waar kan ik de stringlist ergens vinden?
In de help

Array's beginnen indien niet anders aangegeven met 0 en zeker Dynamische array's. Dat betekend ook dat het laatste element maximaal een index heeft van de lengte van de array - 1.

Array[Teller+1] is dus te hoog als de array maar Teller + 1 groot is.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1