Autor Beitrag
stephan271204
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 29.12.06 12:18 
Also ich schreibe gerade ein Datenbankprogramm für die Schule. In einer Unit möchte ich die Daten ablegen, das funktioniert schon. Jeder Datensatz beginnt in einer Textdatei mit einem "[" und endet mit einem "*". Eine weitere Unit baut diese Klammer wieder ab und soll den Text dazwischen zurückgeben. In einer Textdatei gibt es mehrere solcher Felder mit "[ ... *", deswegen musste auch eine Schleife herhalten. Hier ist ersteinmal die Unit:

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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
unit Unit3;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TDaten = array of string;

procedure BekommeDaten(a: string);
procedure SucheDatensatz(b: string);
procedure VersendeDaten(c: string);

var daten: TDaten;

implementation

uses Unit1;

procedure BekommeDaten(a: string);
begin
 SucheDatensatz(a);
end;

procedure SucheDatensatz(b: string);
var i,d,j,k: integer; // Zählvariable1, DatenZählvariable,Zählvariable2,Zählvariable3
    text: string;
begin
 text:= b; // umzuwandelnder Text
 d:= 0// Array Zählvariable
 k:= 0// Wortzählvariable
 for i:= 0 to length(text) do
  begin
    if text[i] = '[' then // Anfangsanzeiger eines Wortes
      begin
        daten[d][k]:= text[i+1]; // Anfangsbuchstabe festlegen
        j:= i + 2// Zählvariable für den Text
        repeat
         k:= k + 1;
         daten[d][k]:= text[j];
         j:= j + 1;
        until text[j] = '*';
        d:= d + 1;
        k:= 0;
      end;
  end;
 for i:= 0 to 1000000 do
  VersendeDaten(daten[i]);
end;

procedure VersendeDaten(c: string);
begin
 Unit1.Form1.Edit10.Text:= c;
end;

end.


Wenn ich das durchführe, dann bekomme ich allerdings einen Fehler. Was habe ich falsch gemacht?

Moderiert von user profile iconraziel: Quote- durch Delphi-Tags ersetzt
mpth
Hält's aus hier
Beiträge: 6

Win XP
Delphi 7 Prof, Turbo Delphi 2006 Prof.
BeitragVerfasst: Fr 29.12.06 12:29 
solltest es mal mit SetLength(Daten... versuchen, bevor du ein nicht initialisiertes dynamisches array mit daten füllen willst...

außerdem werden auch die einzelnen elemente des arrays nicht einmal initialisiert :cry:

_________________
hexen ist keine kunst, sondern harte arbeit...
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 29.12.06 16:59 
warum denn so kompliziert?

nimm doch einfach pos und delete (hast ja eh 'ne lokale variable) und speicher das temp. in einer stringliste... das sieht dann ungefähr so aus...

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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit3;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

procedure BekommeDaten(a: string);
procedure SucheDatensatz(b: string);
procedure VersendeDaten(c: string);

implementation

uses Unit1;

procedure BekommeDaten(a: string);
begin
 SucheDatensatz(a);
end;

procedure SucheDatensatz(b: string);
var
 i: integer;
 sl: tstringlist;
begin
 sl := tstringlist.create;
 try
  while pos('*', b) < 0 do
  begin
   sl.add(copy(b,1,pos('*',b));
   delete(b,1,pos('*',b)+1); 
   //hier ggf. noch aufräumen in B und stringlist
  end  

  for i:= 0 to 1000000 do //hier wäre es auch günstiger von i := 0 to sl.count -1 do..
   VersendeDaten(sl[i]);
 finalize
  sl.free;
 end;
end;

procedure VersendeDaten(c: string);
begin
 Unit1.Form1.Edit10.Text:= c; //hier wirst wohl noch dran arbeiten dürfen
end;

end.