AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zeilen mit Stringliste bis zu bestimmten Zeichen auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilen mit Stringliste bis zu bestimmten Zeichen auslesen

Ein Thema von DragonsTear · begonnen am 30. Jul 2006 · letzter Beitrag vom 30. Jul 2006
Antwort Antwort
Seite 1 von 3  1 23      
DragonsTear

Registriert seit: 30. Jul 2006
12 Beiträge
 
Delphi 2005 Personal
 
#1

Zeilen mit Stringliste bis zu bestimmten Zeichen auslesen

  Alt 30. Jul 2006, 11:58
**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?!?!
  Mit Zitat antworten Zitat
droppi
(Gast)

n/a Beiträge
 
#2

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 12:00
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.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 12:03
Delphi-Quellcode:
StringList.Delimiter := '|':
StringList.DelimitedText := zeile;
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 12:42
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
  Mit Zitat antworten Zitat
DragonsTear

Registriert seit: 30. Jul 2006
12 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 12:47
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 13:13
Fast richtig,

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
  Mit Zitat antworten Zitat
DragonsTear

Registriert seit: 30. Jul 2006
12 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 14:02
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 14:12
Wo ist Textdatei deklariert? Und von welchem Typ?
Verwende bitte Delphi-Tags.
Markus Kinzler
  Mit Zitat antworten Zitat
DragonsTear

Registriert seit: 30. Jul 2006
12 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 14:14
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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Zeilen mit Stringliste bis zu bestimmten Zeichen auslese

  Alt 30. Jul 2006, 14:23
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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:52 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