Thema: Delphi Text-Dateien in Delphi7

Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Text-Dateien in Delphi7

  Alt 5. Dez 2006, 08:25
HI und erstmal herzlich Willkommen in der DP

Dateien, die mehrere Datensätze über ein Zeichen trennen sind unter dem Namen CSV (Character Seperated File) bekannt. Such einfach mal in der DP nach Hier im Forum suchencsv.
Im Prinzip hat mkinzler schon alles wichtige Gesagt, du kannst mit der Methode LoadFromFile von der Klasse TStrings eine Datei laden. TStrings kannst du dabei nicht direkt instanziieren (solltest es jedenfalls nicht tun), da diese Klasse abstrakt ist. Du musst einfach nur einen der Nachfahren verwenden (TStringsList oder THashedStringList).
Beim Laden solltest du darauf achten, dass du einen absoluten Pfad angibst (relative Pfade beziehen sich immer auf das aktuelle Arbeitsverzeichnis, das wechseln kann, was aber ein anderes Thema ist). Am saubersten ist es, sich den absoluten Pfad zur Laufzeit zu generieren. Dazu kannst du einfach den ParamStr(0) verwenden, hier findest du den kompletten Pfad zu deiner Anwendung (Verzeichnis + Name der Exe). Extrahierst du hier den Pfad hast du zwar etwas absolutes, da es aber erst zur Laufzeit erzeugt wird ist dieser auf jedem System gültig. Alles hinter diesem Pfad kann dann relativ sein.
Auf die einzelnen Zeilen kannst du in einem TStrings Objekt direkt wie bei einem Array zugreifen. So kommst du schonmal an alle Zeilen, die gespeichert wurden.
Delphi-Quellcode:
var strings : TStrings;
    path : String;
    i : Integer;
begin
  strings := TStringList.Create;
  try
    // hier den absoluten Pfad zur Exe ermitteln (der Name der Exe wird "abgeschnitten"
    path := ExtractFilePath(ParamStr(0));

    // einen relativen Pfad (von dem Ordner in dem die Exe liegt)
    // und den Dateinamen ergänzen
    path := path + 'DeineDatei.xyz';

    // Laden der Datei
    strings.LoadFromFile(path);
    
    if strings.Count > 0 then
    begin
      // alle Zeilen auslesen und weiterverarbeiten
      for i := 0 to strings.Count - 1 do
      begin
        // doFoo ist dann die Methode, die den String weiterverarbeitet
        doFoo(strings[i]);
      end; // for i := 0 to strings.Count - 1
    end; // if strings.Count > 0
  finally
    strings.Free;
  end;
Ja, statt doFoo solltest du natürlich eine sinnvolle Funktion verwenden. Der Rest ist dann das zerlegen des Strings anhand der Komma (oder eines Trennzeichens), da wirst du in der Codelib sicherlich eine explode-Funktion finden bzw. einen StringTokenizer oder wie man die sonst so nennt.

An sich hier aber auch die Bitte, wenn du schon etwas versucht hast und nicht weiter kommst, dann sag doch einfach mal was genau du gemacht hast und was passiert ist. Das hilft dann den Leuten, die dir helfen wollen. Vielleicht bist du ja schon auf dem total richtigen Weg und hast nur einen kleinen Fehler drin. Man kann es dir einfach leichter erklären und man sieht auch, dass du dich bemühst (meine nicht, dass es hier nicht so rüber kam!).
Wenn also etwas noch nicht für die Umsetzung reicht, einfach mal sagen was du schon hast und wie du dir das denkst.

Gruß Der Unwissende
  Mit Zitat antworten Zitat