AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Liste parsen

Ein Thema von delphien · begonnen am 20. Dez 2005 · letzter Beitrag vom 20. Dez 2005
Antwort Antwort
delphien

Registriert seit: 25. Nov 2005
27 Beiträge
 
#1

Liste parsen

  Alt 20. Dez 2005, 14:30
Hallo liebe Delphinarier,

ich habe ein echtes Problem, das mir schon einige Tage zu schaffen macht.
Mit Programmierung beschäftige ich mich erst seit ein paar Monaten...

Ich habe eine Liste, die verschiedene strings beinhaltet. Das sieht in etwa
so aus:

wort1 | wort2 | wort3 | wort4 | wort1 | wort4 | wort7 | wort8 ......

Sagen wir mal, daß die strings "wort2", "wort4" und "wort7" besonders relevant sind,
sozusagen ein "Gerüst" bilden.

Was ich machen will, kann ich zwar in Worten ausdrücken, aber dieses
dann in Quelltext zu schreiben, bereitet mir Probleme.

1. Ich gehe die Liste von links nach rechts durch

2. Auf jeden string brauche ich den Zugriff, da ich jeden string verarbeiten will

3. Wenn der string "wort2" vorkommt, dann muß ich den string "wort4" umschreiben
(wenn er danach vorkommt !), aber nur wenn der string "wort7" nach "wort4" vorkommt, sonst nicht.
usw., fortlaufend versteht sich.

4. In dem Beispiel dann so:

wort1 | wort2 | wort3 | edit wort4 | wort1 | wort7 | wort8 .......

In der Liste selbst ändere ich natürlich nichts.

Habe ich mich einigermaßen verständlich ausgedrückt ?
Sonst könnt Ihr mich fragen...
Für eure Hilfe wäre ich Euch sehr dankbar !
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#2

Re: Liste parsen

  Alt 20. Dez 2005, 14:39
Delphi-Quellcode:
type
  TExplodeArray = Array of String;

{ ************************************************************ }
function Explode (const cSeparator, vString: WideString): TExplodeArray;
{ ************************************************************ }
var
  i: Integer;
  S: String;
begin
  S := vString;
  SetLength(Result, 0);
  i := 0;
  while Pos(cSeparator, S) > 0 do begin
    SetLength(Result, Length(Result) +1);
    Result[i] := Copy(S, 1, Pos(cSeparator, S) -1);
    Inc(i);
    S := Copy(S, Pos(cSeparator, S) + Length(cSeparator), Length(S));
  end;
  SetLength(Result, Length(Result) +1);
  Result[i] := Copy(S, 1, Length(S));
end;

{ ************************************************************ }
function Implode (const cSeparator: WideString; const cArray: TExplodeArray): String;
{ ************************************************************ }
var
  i: Integer;
begin
  Result := '';
  for i := 0 to Length(cArray) -1 do begin
    Result := Result + cSeparator + cArray[i];
  end;
  System.Delete(Result, 1, Length(cSeparator));
end;

...

Str := 'Wort1|Wort2|Wort3|...';

StrItems := Explode ('|', Str);

if (StrItems[0] = 'Wort1') then
  StrItems[3] := 'Neues Wort';

Str := Implode ('|', StrItems);
Suchst du vielleicht das?
  Mit Zitat antworten Zitat
delphien

Registriert seit: 25. Nov 2005
27 Beiträge
 
#3

Re: Liste parsen

  Alt 20. Dez 2005, 15:02
Okay, nochmal etwas genauer:

Die function Explode benutze ich schon.
Also ich habe ein Array aus Wörtern, auf die ich ja Zugriff habe.
Von der Liste lege ich mir anfangs eine Kopie an, wobei ich diese dann
nachher verändere. Die Positionen der Wörter in der Liste bleiben aber
unverändert. Zu jedem Wort in dem array existiert eine Eigenschaft.
Ich gehe das Array von links nach rechts durch.

Stoße ich auf ein Wort mit einer Eigenschaft A, z.B. "Hund" besitzt
die Eigenschaft A, dann suche ich ein Wort mit der Eigenschaft B, z.B.
"Katze" und nur wenn ein Wort mit Eigenschaft B vorkommt, suche ich noch
nach einem Wort mit der Eigenschaft C ("Maus").
Immer rechts von dem Wort gesehen, niemals links.

In der Kopie würde ich dann das Wort "Katze" ändern wollen.
Nochmals. Die Position der Wörter in der Liste bleibt unverändert.

Ich brauche so ne Art Pseudo-Code...
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

Re: Liste parsen

  Alt 20. Dez 2005, 15:18
Einfach zu realisieren ist das Ganze auch mit einer StringList:
Delphi-Quellcode:
var
  List,
  ListFile: TStringList;
begin
  List := TStringList.Create;
  ListFile := TStringList.Create;
  List.Delimiter := '|';
  ListFile.LoadFromFile({Dateiname der Liste});
  List.DelimitedText := ListFile.Text;

  {Zugriff auf die Elemente der Liste dann mit
  List[0] = 1. String
  List[1] = 2. String
 
  Schreiben einfach
  List[0] := 'test' 1. String mit 'test' füllen
  }


  //Wieder speichern der Liste:
  ListFile.Text := List.Text;
  ListFile.SaveToFile({Dateiname der Liste});

  ListFile.Free;
  List.Free;
end;
Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz