Autor Beitrag
Nano-Ware
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 7



BeitragVerfasst: So 04.04.10 17:59 
Hey,

ich machs ganz kurz, und bitte genau auf dieses Beispiel eingehen ;)

Ich habe dein String:
ausblenden Quelltext
1:
Hans->Meier->13->8c					

Und möchte, dass diese 4 Teile (Vorname->Name->Alter->Klasse) in je eine Variable gespeichert werden

Wie bewerkstellige ich das?

Vielen Dank schon jetzteinmal

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: So 04.04.10 18:07 
Also du brauchst mal die Funktion PosEx() mit der du rausfindest wo das nächste "->" ist und die Funktion Copy() mit der du gefundene Substrings extrahieren kannst. Außerdem noch eine Schleife, am besten repeat oder auch while. Mit dem wissen solltest du es hinbekommen.

lg elundril

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: So 04.04.10 18:11 
Für genau dieses Beispiel

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var 
 vorname, name, alter, klasse:string;
begin
 vorname := 'Hans';
 name := 'Meier';
 alter := '13';
 klasse := '8c';



Ansonsten musst du den string in einer (oder mehreren) while Schleifen durchgehen und nach deinen Abbruchzeichen "-" oder besser "->" suchen (nur "-" könnte problematisch bei Doppelnamen werden).

Pseudocodemäßig wäre das ungefähr so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
Position := 0;

while Zeichen an Position <> "-" und Zeichen an Position+1 <>">"
 vorname := vorname + Zeichen an Position;
 Position := Position+1;

Position := Position +2;

//hier dann so ziemlich dasselbe für name und alter

//Das was nach Alter noch übrig bleibt ist die Klasse
Klasse := Reststring ab Position;
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19321
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 04.04.10 19:24 
Dabei ist mir ein Beispiel eingefallen, das ich zufällig rumliegen hab:
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:
type
  TStringArray = array of String;
  PStringArray = ^TStringArray;

procedure ScanF(const AText, ADelim: string; ATarget: PStringArray);
var
  CurTargetIndex, CurTargetLength: Integer;
  CurTarget, CurChar, CurDelim: PChar;
begin
  SetLength(ATarget^, Length(AText));
  CurTargetIndex := 0;
  CurChar := PChar(AText);
  CurDelim := PChar(ADelim);
  CurTarget := CurChar;
  while (CurChar^ <> #0or (CurTarget <> nildo
  begin
    if (CurChar^ = CurDelim^) or (CurChar^ = #0then
    begin
      if CurTarget <> nil then
      begin
        CurTargetLength := Integer(CurChar) - Integer(CurTarget);
        ATarget^[CurTargetIndex] := Copy(CurTarget, 1, CurTargetLength);
        Inc(CurTargetIndex);
        CurTarget := nil;
      end;
      Inc(CurDelim);
    end
    else if CurTarget = nil then
    begin
      CurDelim := PChar(ADelim);
      CurTarget := PChar(CurChar);
    end;
    if CurChar^ <> #0 then
      Inc(CurChar);
  end;
  SetLength(ATarget^, CurTargetIndex);
end;

var
  TargetArray: TStringArray;
  i: Integer;
begin
  ScanF('Hans->Meier->13->8c''->', @TargetArray);
  for i := 0 to High(TargetArray) do
    ShowMessage(TargetArray[i]);
end;
War zwar eher ne Demo für Pointer, aber erfüllt ihren Zweck. :mrgreen: