Autor Beitrag
Ice
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 114



BeitragVerfasst: Di 02.07.02 20:04 
Hi Leute!

Ich habe folgendes Problem:

Aus einem bestimmten String möchte ich nach einem bestimmten Zeichen suchen z.B. leerzeichen, jetzt möchte ich mehrere strings erzeugen der erste vom anfang bis zum ersten leerzeichen , vom ersten leerzeichen bis zum zweiten, vom zweiten bis zum dritten usw.
Kann mir da jemand helfen ?

für Hinweise wäre ich echt dankbar!

Marco
mathias
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 58
Erhaltene Danke: 3



BeitragVerfasst: Di 02.07.02 20:09 
Schau mal unter der Online-Hilfe nach Pos und Copy, mit den 2 Befehlen kommst Du schon recht weit. :D
Ice Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 114



BeitragVerfasst: Di 02.07.02 21:07 
:P alles klar ich probiers mal !

danke
damadmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Di 09.07.02 15:27 
versuch das mal:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function explode(s : string; ch : char; var args : tstrings): integer;
var p,i : integer;
begin
  p := 1;
  for i := 1 to length(s) do begin
    if (s[i] = ch) or (i = length(s)) then begin
      args.Add(copy(s,p,i-p));
      p := i + 1;
    end;
  end;
  result := args.count;
end;


oder so:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
function explode(s : string; ch : char; var args : tstrings): integer;
var p : integer;
begin
  while length(s) > 0 do
  begin
    p := pos(ch, s);
    if p > 0 then
    begin
      args.Add(copy(s,1,p-1));
      delete(s,1,p);
    end else
    begin
      args.Add(s);
      s := '';
    end;
  end;
  result := args.count;
end;


die 2. ist wohl die bessere....

du solltest vorher die stringlist erstellen und dann an die funktion übergeben.
s ist der zu durchsuchende string
ch ist der platzhalter (leerzeichen, semikolon, ...)
args die stringlist

achso: die funktion berücksichtigt nur ein trennzeichen. wenn also 5 leerzeichen aufeinander folgen, kommen auch 5 einträge in der stringlist hinzu

man könnte auch das funktionsergebnis als stringlist zurückgeben. naja wie man will halt.

_________________
Alle Rechtschreibfehler sind gewollt und sollen meine Individualität verstärkt zum Ausdruck bringen.
Ice Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 114



BeitragVerfasst: Di 09.07.02 18:44 
:D Alles klar ! Vielen Dank!


Marco
Visum
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Mi 10.07.02 13:39 
Hi, hab die gleiche Frage wegen dem Auflösen von Strings.

Leider versteh ich nicht so ganz, wie man deine Funktionen einbindet :(

Jedesmal, wenn ich versuche eine der Funktionen aufzurufen bricht er mit einem "Abstract Error" ab. Was mach ich da bitte falsch?
Muss ich als Parameter eine TStringlist angeben? Weil der hat die nicht angenommen und so hab ich eine Variable vom Typ TStrings eingesetzt.

Gruß
Visum
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 10.07.02 14:43 
tStrings ist eine Abstakte-Klasse und man sollte nie eine Instanz davon erstellen. (schau mal in der Delphi-Hilfe unter dem Begriff Mit Stringlisten arbeiten nach) Nehme lieber tStringList!
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Var
  SL: tStringList;
Begin
  SL := tStringList.Create;

  Explode (s, ch, SL); // <- nur als Beispiel!

  SL.Free;
End;
Visum
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 106



BeitragVerfasst: Do 11.07.02 00:35 
Hi,
wenn ich das ganze mit einer tStringList mache, bringt Delphi immer nur Folgenden Fehler: "Types of actual an formal var parameters must be identical".

Wenn ich in der Funktion selbst anstelle dem tStrings ein tStringlist einsetze funktioniert alles wunderbar :D

Danke
Visum
damadmax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 60



BeitragVerfasst: Fr 12.07.02 01:12 
also ich binde das so ein:


ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Var
  ZuZerlegenderString : String;
  Trennzeichen : Char;
  Liste : TStrings;

Begin
  ZuZerlegenderString := 'Ich bin ein zu zerlegender String';
  Liste := TStringList.Create;
  Trennzeichen := ' ';  //Leerzeichen zum Beispiel
  Anzahl := Explode( ZuzerlegenderString, Trennzeichen, Liste );
  Liste.Free;
End.



@tino:

so stehts in der hilfe :D

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);

var
    TempList: TStrings;      { Liste deklarieren }
begin
    TempList := TStringList.Create;          { Listenobjekt erzeugen }
    try
      { Stringliste verwenden }
    finally
      TempList.Free;      { Listenobjekt freigeben }
    end;
end;

_________________
Alle Rechtschreibfehler sind gewollt und sollen meine Individualität verstärkt zum Ausdruck bringen.