Autor Beitrag
.50AE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Fr 07.04.06 16:31 
Halloo.

Bei dieser Prozedur

ausblenden Delphi-Quelltext
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:
procedure strextrahieren(strall:string);
var
//Außerhalb der Prozedur deklariert: strpart: string; ('-or-')
stemp: string;
s: array of string;
int: array of integer;
i: integer;
begin
showmessage(strall+' '+strpart);
//Init
form_mainform.listtemp4.Clear;
setlength(s,length(strall));
setlength(int,length(strall));
//Aktion
//1. String rausfinden
stemp := strall;
int[1] := nextpos(strpart, strall, 1);
Delete(stemp,int[1],length(strall));
form_mainform.listtemp4.Items.Add(stemp);
for i := 1 to length(strall) do
begin
stemp := strall;
int[i+1] := nextpos(strpart, stemp, int[i]);
Delete(stemp,int[i+1],length(strall));
        //Alles davor löschen
        Delete(stemp,1,int[i]+(length(strpart)-1));
form_mainform.listtemp4.Items.Add(stemp);
end;
end;


beendet sich das Programm einfach ohne Fehlermeldung.
Wenn ich es über Delphi teste erscheint ein Fenster Namens CPU zusammen mit einer Meldung: Project (...) faulted with Message: 'acces violation at blabla... ...'

Die Prozedur ist dazu da mehrere durch Trennzeichenfolgen eingegebene Wörter zu extrahieren (Nach Listtemp4, einer Listbox..)

Ich such jetzt schon ne ganze Weile rum, aber ich weiß nicht warum das ganze Probleme verursacht.. In einem Testprogramm in leicht abgeänderter Form hat es noch geklappt.

Ich bin sicher, dass der Fehler in dieser Prozedur liegt; außerdem sind die Strings, mit der die Prozedur arbeitet auch korrekt (es kommt z.b. auch eine Trennzeichenfolge vor.. auch wenn es auch ohne diese klappen sollte...)


Ich hoffe jemand findet den Fehler,
.50AE
Waldteufel
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 07.04.06 16:36 
Hi .50AE. :wave: (Wie spricht man das blos aus? :gruebel:)

Die Indizes von dynamischen Arrays beginnen immer bei  0 und hören bei  Length(MeinArray) - 1 auf. Du aber iterierst von  1 bis  Length(MeinArray) und greifst so auf ein Arrayelement zu, das nicht existiert, ergo: Access Violation! ;-)
GSE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 740

Win 2k, Win XP Pro
D5 Prof, D6 Ent, D2k5 PE
BeitragVerfasst: Fr 07.04.06 16:36 
hi,

also,
ausblenden volle Höhe Delphi-Quelltext
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:
procedure strextrahieren(strall:string);
var
//Außerhalb der Prozedur deklariert: strpart: string; ('-or-')
stemp: string;
s: array of string;
int: array of integer;
i: integer;
begin
showmessage(strall+' '+strpart);
//Init
form_mainform.listtemp4.Clear;
setlength(s,length(strall));
setlength(int,length(strall));
//Aktion
//1. String rausfinden
stemp := strall;
int[1] := nextpos(strpart, strall, 1);
// dein Array beginnt bei 0 (Null) und geht bis length(strall)-1
Delete(stemp,int[1],length(strall));
form_mainform.listtemp4.Items.Add(stemp);
for i := 1 to length(strall) do
begin
stemp := strall;
int[i+1] := nextpos(strpart, stemp, int[i]);
// Wenn i length(strall) ist, greifst du auf ein Array Element zu, dass nicht existiert
Delete(stemp,int[i+1],length(strall));
        //Alles davor löschen
        Delete(stemp,1,int[i]+(length(strpart)-1));
form_mainform.listtemp4.Items.Add(stemp);
end;
end;


such mal hier forum nach der explode funktion, die sollte genau das machen was du willst

edit: da nehm ich mir nun Zeit mal die highlight tags zu verwenden, und dann postet noch jmd. vor mir. toll :wink:

mfg
GSE

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs
and the universe trying to produce bigger and better idiots. So far, the universe is winning. (Richard Cook)
.50AE Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 100



BeitragVerfasst: Fr 07.04.06 17:42 
Ahh, wieder was gelernt :) :D

Vielen Dank, da wär ich sonst nie draufgekommen!!

@GSE Wenn es so ne Funktion wirklich gibt hätte ich mir das ja gleich alles sparen können -.-

@Waldteufel Man spricht es Punkt-fünf-null-a-e :wink:
(www.waffenmarti.ch/p...er_brushedchrome.jpg)



EDIT: Das mit der Explode Funktion klappt prima; Danke nochmal!