Autor Beitrag
CGerdon
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.06.03 12:17 
Hi!
Ich habe hier eine Textdatei die folgendermaßen aufgebaut ist:
Zitat:
1|text|64.246.38.98|6667|28,8|10,3|1567

Wie kann ich den text bis zu dem ersten | auslesen und dann z.b. in ein Editfeld schreiben oder als Caption für ein Label? Und wie geht das dann bis zum 2. |?? :oops:
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 12:22 
Such mal hier im forum nach explode

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
CGerdon
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.06.03 12:37 
www.delphi-forum.de/...ic.php?p=45780#45780
Da hin hat mich die Suchfunktion gebracht, nur hilft mir das irgendwie gar nix :oops: O gott, warum ist Delphi so schwer :(
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 13:59 
Kopier dir Funktion mal + die Typdeklaration.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
MyExpl: TStringDynArray;
{ ... }

{ In S die Zeile einlesen }

// 1|text|64.246.38.98|6667|28,8|10,3|1567
// 0|1   |2           |3   |4   |5   |6   

{ Das Untere ist die Adressierung im Array }

MyExpl := Explode('|', S); // Das Array füllen

// dann z.B.
Label1.Caption := MyExpl[0];  // siehe oben
Edit1.Text := MyExpl[1];
IPEdit1.Text := MyExpl[2]; // Hab mal angenommen das ist ne IP

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.


Zuletzt bearbeitet von Tweafis am So 22.06.03 14:04, insgesamt 1-mal bearbeitet
CGerdon
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.06.03 14:04 
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:
58:
59:
60:
61:
62:
63:
unit Unit1;

interface

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

type
  TForm1 = class(TForm);
  TStringDynArray = array of string;

 private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var 
  SepLen: Integer; 
  F, P: PChar; 
  ALen, Index: Integer; 
begin 
  SetLength(Result, 0); 
  if (S = ''or (Limit < 0then Exit; 
  if Separator = '' then 
  begin 
    SetLength(Result, 1); 
    Result[0] := S; 
    Exit; 
  end
  SepLen := Length(Separator); 
  ALen := Limit; 
  SetLength(Result, ALen); 

  Index := 0
  P := PChar(S); 
  while P^ <> #0 do 
  begin 
    F := P; 
    P := StrPos(P, PChar(Separator)); 
    if (P = nilor ((Limit > 0and (Index = Limit - 1)) then P := StrEnd(F); 
    if Index >= ALen then 
    begin 
      Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können 
      SetLength(Result, ALen); 
    end
    SetString(Result[Index], F, P - F); 
    Inc(Index); 
    if P^ <> #0 then Inc(P, SepLen); 
  end
  if Index < ALen then SetLength(Result, Index); // wirkliche Länge festlegen 
end;

end.

Das funktioniert leider auch nich, oder hab ich was falsch gemacht? :oops:
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 14:05 
Was geht denn nicht? Fehlermeldung,...? Das ist nur die Funktion, du verarbeitest ja gar keine Daten.

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
CGerdon
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.06.03 14:09 
Zitat:
[Fehler] Unit1.pas(15): '=' erwartet, aber Bezeichner 'public' gefunden
[Fehler] Unit1.pas(17): ';' erwartet, aber 'END' gefunden
[Fehler] Unit1.pas(22): '.' erwartet, aber 'IMPLEMENTATION' gefunden
[Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

:(
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 14:10 
Du musst die Typdeklaration nicht in dein Form rein sondern kurz vor der Funktion aber NICHT IN DEINE TFORM1 REIN.

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 14:12 
Das geht:

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:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{-----------------------------------------------------------------------------
  Procedure : Explode
  Purpose   : Seperates a CSV-line
  Arguments : const Separator, S: string; Limit: Integer = 0
  Result    : TStringDynArray
-----------------------------------------------------------------------------}

type
  TStringDynArray = array of string;

function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = ''or (Limit < 0then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := StrPos(P, PChar(Separator));
    if (P = nilor ((Limit > 0and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index); // wirkliche Länge festlegen
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  VItems: TStringDynArray;
  x: Integer;

begin
  VItems := Explode('|', Edit1.Text);
  for x := Low(VItems) to High(Vitems) do
    ShowMessage('VItems['+inttostr(x)+'] = '+VItems[x]);
end;

end.


Du brauchst nur ein Edit und ein Button

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
CGerdon
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.06.03 14:24 
Oke, also Errors kommen jetzt mal keine, nur funktionieren tut das ned. Ich hab ne Textdatei in C:\test mit dem namen test.txt. Drin steht 123|456.
Geb ich in das Edit Feld C:\test\test.txt ein und klick auf den Button, kommt nur ne Message
Zitat:
VItems[0] = C:\test\test.txt
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 14:26 
Das war nur ein Beispiel, du musst in das Edit direkt die Zeile eingeben. Schreiben musst du dein Programm schon selber. Also Zeile auslesen und per ArrayIndex den Einzelnen Labels und Edits oder sowas den string zuweisen...

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
CGerdon
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 22.06.03 14:28 
Mitt Zeile angeben gehts. Klasse danke! :dance2:
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: So 22.06.03 14:34 
Gern geschehen :D probier halt nöchstes mal direkt die Posts besser zu lesen bztw den Code mal selberzu debuggen und logisch durchzugehen, davon lernst du meistens mehr als wenn dir das hier jemand erklärt! Ist ernsthaft also Wenn du siehst das da viele Fehler sind, dass du mal guckst woran es liegen könnte!

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.