AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dateien in einer Stringliste oder TMemo importieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien in einer Stringliste oder TMemo importieren?

Ein Thema von smart · begonnen am 27. Jul 2005 · letzter Beitrag vom 27. Jul 2005
Antwort Antwort
Seite 2 von 3     12 3      
Thanatos81
(Gast)

n/a Beiträge
 
#11

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 14:00
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?
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 14:04
Zitat von Thanatos81:
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?
Nein, Es kann auch eine Stringliste sein, nur das Format muss stimmen da es vom einem fremden Programm so verarbeitet wird.
Heike Kretschmann
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#13

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 14:06
Zitat von Thanatos81:
So lange du keine Schriftart benutzt, bei der alle Zeichen exakt die gleich Breite haben, wirst du das auch nicht hinbekommen.
Auch wenn ein StrigGrid oder TreeView auf jeden fall besser ist.
Man kann bei einem Memo ja auch einfach die TabStops (in Pixeln) setzen:
Delphi-Quellcode:
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;
[Edit]
Hier noch ein Beispiel wie man das ganze parsen könnte:
Delphi-Quellcode:
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;
Es wird jede Zeile der Textdatei durchlaufen (SL1) dann wird jeder "Teil" (mit dem Trennzeichen ";") als eine Zeile in SL2 bereitgestellt.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Thanatos81
(Gast)

n/a Beiträge
 
#14

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 14:24
OK, wie Sharky bewiesen hat, hätte ich schreiben sollen "wirst du das auch nicht schön hinbekommen."

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;
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 15:02
Zitat von Thanatos81:
OK, wie Sharky bewiesen hat, hätte ich schreiben sollen "wirst du das auch nicht schön hinbekommen."

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;
Auf die Idee bin ich auch schon bekommen, aber dann habe ich kein Format. Das Format sieht so aus:
Zeile 1, Stelle 0 bis 13 = Nummer, Stelle 14 bis 24 = Bezeichnung, Stelle 25 bis 32 = Preis. Das ganze, Zeile für Zeile.
Heike Kretschmann
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#16

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 15:12
Hai Heike,

das "formatieren" dürfte kein Problem sein

Hier mal eine veränderte Form meines obigen Codes:
Delphi-Quellcode:
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;
Edit: Fehler im Code beseitigt
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von smart
smart

Registriert seit: 19. Dez 2004
Ort: Bochum
1.266 Beiträge
 
Delphi 2007 Professional
 
#17

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 15:20
Zitat von Sharky:
Hai Heike,

das "formatieren" dürfte kein Problem sein

Hier mal eine veränderte Form meines obigen Codes:
Hallo Stepahn!

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
Heike Kretschmann
  Mit Zitat antworten Zitat
marabu

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

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 15:32
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
Angehängte Dateien
Dateityp: dpr csv2asc_118.dpr (2,2 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#19

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 15:57
Warum arbeitest du nicht mit einem Tabulator(#9)?

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.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Dateien in einer Stringliste oder TMemo importieren?

  Alt 27. Jul 2005, 16:00
Zitat von smart:
...Vielen Dank für Deine Mühe. Da bekomme ich Fehlermeldungen:
Ups... da habe ich mich beim tippen der Funktion vertippelt

Delphi-Quellcode:
function PadR(aValue: string; aLen: byte; aFill: char): string;
  //right pads a string with spaces
begin
  Result := aValue + StringOfChar(aFill, aLen - Length(aValue));
end;
@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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 23:57 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