![]() |
Re: Dateien in einer Stringliste oder TMemo importieren?
So lange du keine Schriftart benutzt, bei der alle Zeichen exakt die gleich Breite haben, wirst du das auch nicht hinbekommen. Muss es denn zwangsweise ein Memo sein?
|
Re: Dateien in einer Stringliste oder TMemo importieren?
Zitat:
|
Re: Dateien in einer Stringliste oder TMemo importieren?
Zitat:
Man kann bei einem Memo ja auch einfach die TabStops (in Pixeln) setzen:
Delphi-Quellcode:
[Edit]
procedure TForm1.FormCreate(Sender: TObject);
var ndx : integer; TabArray : Array [0..4] of integer; begin Memo1.WantTabs := True; for ndx := 0 to 4 do begin TabArray[ndx] := 30 * ndx; end; SendMessage(Memo1.Handle,EM_SETTABSTOPS,5,LongInt(@TabArray)); end; Hier noch ein Beispiel wie man das ganze parsen könnte:
Delphi-Quellcode:
Es wird jede Zeile der Textdatei durchlaufen (SL1) dann wird jeder "Teil" (mit dem Trennzeichen ";") als eine Zeile in SL2 bereitgestellt.
procedure TForm1.LadenClick(Sender: TObject);
var sl1: TStringList; sl2: TStringList; ndx1: integer; ndx2: integer; begin sl1 := TStringList.Create; sl2 := TStringList.Create; try sl2.Delimiter := ';'; sl1.LoadFromFile(Dateiname); for ndx1 := 0 to Pred (sl1.Count) do begin sl2.DelimitedText := sl1.Strings[ndx1]; for ndx2 := 0 to Pred(sl2.Count) do begin MacheEtwasMitJederZeile (sl2.Strings[ndx2]); end; end; finally sl2.Free; sl1.Free; end; end; |
Re: Dateien in einer Stringliste oder TMemo importieren?
OK, wie Sharky bewiesen hat, hätte ich schreiben sollen "wirst du das auch nicht schön hinbekommen." :wink:
Hab ich das richtig? Du liest Dateien ein, die mit ; getrennt sind und musst die so aufbereiten, dass sie statt dessen mit Tab getrennt sind, damit ein drittes Programm das verarbeiten kann? Dann würde ich auf visuelle Kompos verzichten, und einfach nur ';' durch Tab ersetzen und dann das ganze wieder wegspeichern. €dit, also ungefähr so:
Delphi-Quellcode:
procedure ersetze(input,output: TFileName);
var sl : TStringList; begin sl := TStringList.Create; try sl.LoadFromFile(input); sl.Text := StringReplace(sl.Text,';',#9,[rfReplaceAll]); sl.SaveToFile(output); finally FreeAndNil(sl); end; end; |
Re: Dateien in einer Stringliste oder TMemo importieren?
Zitat:
Zeile 1, Stelle 0 bis 13 = Nummer, Stelle 14 bis 24 = Bezeichnung, Stelle 25 bis 32 = Preis. Das ganze, Zeile für Zeile. |
Re: Dateien in einer Stringliste oder TMemo importieren?
Hai Heike,
das "formatieren" dürfte kein Problem sein;-) Hier mal eine veränderte Form meines obigen Codes:
Delphi-Quellcode:
Edit: Fehler im Code beseitigt
function PadR(aValue : string; aLen : byte; aFill: char): string;
//right pads a string with spaces begin Result := aValue + StringOfChar(aFill, aLen - Length(aValue)); end; procedure TForm1.LadenClick(Sender: TObject); var sl1: TStringList; sl2: TStringList; ndx1: integer; nummer: string; preis: string; bezeichung: string; begin sl1 := TStringList.Create; sl2 := TStringList.Create; try sl2.Delimiter := ';'; sl1.LoadFromFile(Dateiname); for ndx1 := 0 to Pred(sl1.Count) do begin sl2.DelimitedText := sl1.Strings[ndx1]; nummer := PadR(sl2.Strings[0], 13, ' '); bezeichnung := PadR(sl2.Strings[1], 10, ' '); Memo1.Lines.add(nummer + bezeichnung + preis); end; finally sl2.Free; sl1.Free; end; end; |
Re: Dateien in einer Stringliste oder TMemo importieren?
Zitat:
Vielen Dank für Deine Mühe. Da bekomme ich Fehlermeldungen:
Delphi-Quellcode:
[Fehler] Unit1.pas(32): Undefinierter Bezeichner: 'aValue'
[Fehler] Unit1.pas(32): Undefinierter Bezeichner: 'aLen' [Fehler] Unit1.pas(32): Inkompatible Typen [Fehler] Unit1.pas(38): Anweisung erwartet, aber 'VAR' gefunden [Fehler] Unit1.pas(54): Undefinierter Bezeichner: 'PadR' [Fehler] Unit1.pas(56): Operator oder Semikolon fehlt [Fehler] Unit1.pas(63): '.' erwartet, aber ';' gefunden [Hinweis] Unit1.pas(17): Das private-Symbol 'PadR' wurde deklariert, aber nie verwendet [Fataler Fehler] Project2.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
Re: Dateien in einer Stringliste oder TMemo importieren?
Liste der Anhänge anzeigen (Anzahl: 1)
Das von Heike beschriebene Eingabeformat lässt sich aufgrund einer Design-Schwäche in der Komponente TStringList nicht über DelimitedText verarbeiten. Leerzeichen werden als Delimiter behandelt - ich hatte schonmal darauf hingewiesen...
Grüße vom marabu |
Re: Dateien in einer Stringliste oder TMemo importieren?
Warum arbeitest du nicht mit einem Tabulator(#9)? :gruebel:
Pro 8 Zeichen nimmst du einen Tabulator für Zeilen, die kürzer sind. Nimm einfach den String bei den ';' auseinander und prüfe für alle Zeilen einmal die Länge. Anhand des längsten Strings setzt du dann die Gesamtlänge für die "Spalte" fest. Bei zu kurzen Strings mit Tabulator auffüllen. |
Re: Dateien in einer Stringliste oder TMemo importieren?
Zitat:
Delphi-Quellcode:
@marabu: Mist. Das Blank in dem einen Text habe ich übersehen. Ich dachte es wäre keine da. Dann würde es nämlich gehen.
function PadR(aValue: string; aLen: byte; aFill: char): string;
//right pads a string with spaces begin Result := aValue + StringOfChar(aFill, aLen - Length(aValue)); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz