Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeilen mit Stringliste bis zu bestimmten Zeichen auslesen (https://www.delphipraxis.net/74196-zeilen-mit-stringliste-bis-zu-bestimmten-zeichen-auslesen.html)

DragonsTear 30. Jul 2006 11:58


Zeilen mit Stringliste bis zu bestimmten Zeichen auslesen
 
**Kopf kratz** Hoffe dass ist jetzt einigermassen verständlich :

Hab hier eine Datei, bei dieser möchte ich zunächst einmal den Anfang jeder Zeile auslesen. Die Anzahl der Zeilen habe ich in der Variable count gespeichert. Jetzt ist nur das Problem : Der Anfang jeder Zeile ist unterschiedlich, aber jedes Wort endet mit dem Zeichen |, also das Endzeichen für jedes Wort, zum Beispiel :

Blabla1|Rest
Blabla24985|Rest
Blablu27u6|Rest

Ich möchte jetzt dass mir jeweils Blabla1, Blabla24985 und Blablu27u6 in einer Stringliste gespeichert werden, damit ich diese später ausgeben kann...

Ich bin mir aber jetzt unsicher wie ich das machen kann... Mit einer for - Schleife und einer Stringliste?!?!

droppi 30. Jul 2006 12:00

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Guck dir mal die Befehle copy() und pos() an. Damit kannst du in Strings Zeichen auslesen. Musst mal danach suchen, hier gibts bestimmt einige Beispiele.

Edit: Ach ja ich würd jede Zeile in eine Stringlist laden und diese einträge durchgehen.

mkinzler 30. Jul 2006 12:03

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Delphi-Quellcode:
StringList.Delimiter := '|':
StringList.DelimitedText := zeile;

marabu 30. Jul 2006 12:42

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Herzlich willkommen in der Delphi-PRAXiS, DragonsTear.

Hier noch ein anderer Ansatz:

Delphi-Quellcode:
function CreateStrings(fn: TFileName; nvSep: Char): TStrings;
begin
  Result := TStringList.Create;
  with Result do
  begin
    NameValueSeparator := nvSep;
    LoadFromFile(fn);
  end;
end;

procedure ExtractNames(sIn, sOut: TStrings);
var
  i: Integer;
begin
  sOut.Clear;
  for i := 0 to Pred(sIn.Count) do
    sOut.Add(sIn.Names[i]);
end;
Freundliche Grüße vom marabu

DragonsTear 30. Jul 2006 12:47

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Hm, hatte bisjetzt mit Stringlisten nicht viel zu tuen, muss mich insofern da erstmal reindenken...

Wenn ich das aber richtig verstehe, Marabu, machst du folgendes : nvSep ist das Trennzeichen, in meinem Fall | - du kreeierst dann eine Stringliste, mit NameValueSeperator extrahierst du dann den Zeilenanfang bis | und in der zweiten Prozedur werden die dann in der Stringliste sout gespeichert oder?

marabu 30. Jul 2006 13:13

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Fast richtig,

Zitat:

Zitat von DragonsTear
... mit NameValueSeperator extrahierst du dann den Zeilenanfang bis | ...

der gesetzte NameValueSeparator wird erst später beim Zugriff auf die indizierte property Names verwendet - und zwar intern. Eingelesen wird die ganze Textdatei.

marabu

DragonsTear 30. Jul 2006 14:02

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Delphi-Quellcode:
procedure TForm1.Oeffnen1Click(Sender: TObject);
begin
OpenDialog.Options := [ofFileMustExist];
  if OpenDialog.Execute
     then try
            Textdatei := CreateStrings((OpenDialog.FileName),'|');
            ExtractNames(Textdatei,ItemListe);
            Itemnamen.Items.Assign(ItemListe);
          except
            Application.MessageBox ('Datei konnte nicht geladen werden!',
              'Fehler', MB_OK);
          end;
end;
Hm, wollte jetzt erstmal guggen wies und ob es funktioniert... Das Problem ist, dass er mir bereits hier sauber abschmiert...
Die Stringliste ItemListe wird in OnCreate kreeiert...

Wo ist der Fehler? Hängt es mit OpenDialog.Filename zusammen?

mkinzler 30. Jul 2006 14:12

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Wo ist Textdatei deklariert? Und von welchem Typ?
Verwende bitte Delphi-Tags.

DragonsTear 30. Jul 2006 14:14

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Tschuldigung, Textdatei ist das Resultat von der Funktion CreateStrings die oben beschrieben ist.

Delphi-Quellcode:
function CreateStrings(fn: TFileName; nvSep: Char): TStrings;
begin
  Result := TStringList.Create;
  with Result do
  begin
    NameValueSeparator := nvSep;
    LoadFromFile(fn);
  end;
end;

marabu 30. Jul 2006 14:23

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese
 
Habe leider übersehen, dass der NameValueSeparator in D5 noch fest codiert ist:

Delphi-Quellcode:
function CreateStrings(fn: TFileName; nvSep: Char): TStrings;
var
  i, iPos: Integer;
  s: String;
begin
  Result := TStringList.Create;
  with Result do
  begin
    LoadFromFile(fn);
    for i := 0 to Pred(Count) do
    begin
      iPos := Pos(nvSep, Strings[i]);
      if iPos > 0 then
      begin
        s := Strings[i];
        s[iPos] := '=';
        Strings[i] := s;
      end;
    end;
  end;
end;
So sollte es funktionieren.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 Uhr.
Seite 1 von 3  1 23      

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