Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Append_problem mit textfiles (https://www.delphipraxis.net/129890-append_problem-mit-textfiles.html)

homerunjack22 27. Feb 2009 11:08


Append_problem mit textfiles
 
Hallo Community,

ich sitze hier grade an meinem kleinen programm und komme nicht weiter.
Es geht um eine prozedur, die einfach nur einen string in eine textfile schreiben soll...
es soll im csv format geschrieben werden.... meine zeile würde ungefähr so aussehen:

;"COTPOZ";"0";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;"1";"Heimteam";"Gastteam";"COT"; "POZ";"Stadion";"Datum";"Kick-Off";"Wetter";"Art";" Bemerkungen";;;;;

is ein bissl groß, aber genauso benötige ich diesen string in genau einer zeile...
doch mit append und write wird immer einen zeilenumbruch zwischen dem " und Bemerkungen eingefügt...
durch diesen zeilenumbruch kann ich aber dann diese zeile in delphi nicht mehr korrekt auslesen, da ein teil fehlt... (zur weiterverarbeitung in einer stringgrid, brauch aber csv, da ich sie auhc für internetdatenbank benötige)...

wie kann ich denn dem prog beibringen, dass er keinen umbruch machen soll???

hoffe ihr könnt mir helfen und bedanke mich schon mal im vorraus für die antworten...

mfg homerunjack

himitsu 27. Feb 2009 11:25

Re: Append_problem mit textfiles
 
Du arbeitest also mit AssignFile+Append?

Aber eigentlich fürgt Write selber da keine Zeilenumbrüche ein.

Wie sieht denn dein Code zum Anhängen aus?

messie 27. Feb 2009 11:30

Re: Append_problem mit textfiles
 
Zitat:

Zitat von homerunjack22
zeile würde ungefähr so aussehen:

;"COTPOZ";"0";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;"1";"Heimteam";"Gastteam";"COT"; "POZ";"Stadion";"Datum";"Kick-Off";"Wetter";"Art";" Bemerkungen";;;;;

Was ist denn das Zeichen zwischen " und Bemerkung? Denn hier wird es ganz anders dargestellt. Vielleicht hats Du da ein Zeichen drin was bei der Anzeige als Umbruch interpretiert wird.
Für das, was Du vorhast, würde sich eine TStringList anbieten. Die ist einfacher zu handhaben und bietet mit Laden und Speichern viele Features. Musst mal in der Hilfe nachlesen.

Grüße, Messie

homerunjack22 27. Feb 2009 11:38

Re: Append_problem mit textfiles
 
Delphi-Quellcode:
procedure CSV_export_newgame(Datei:string);
var csv:textfile;
    j :integer;
    zeile:string;
begin
  AssignFile(csv, Datei);
  append(csv);
  zeile:='';

  For j:=0 to 72 do
    begin
        If j=72 then
            If NEW_GAME.Bruecke.Cells[j,0]='' then
              begin write(csv, zeile); Writeln(csv); end
              else
              begin write(csv, zeile);writeln(csv);end
           
        else
            If NEW_GAME.Bruecke.Cells[j,0]='' then
              //Write(csv, NEW_GAME.Bruecke.Cells[j,0]+';')
              zeile:=zeile+NEW_GAME.BRUECKE.Cells[j,0]+';'
            else
              //Write(csv, '"'+ NEW_GAME.Bruecke.Cells[j,0]+ '";');
              zeile:=zeile+'"'+ NEW_GAME.Bruecke.Cells[j,0]+ '";';
    end;

  CloseFile(csv);
bruecke ist eine stringgrid...da stehen die daten drinne...die hat 73 spalten, und wegen csv brauch man ja ein paar trennzeichen inna datei...erst hatte ich es so, dass er direkt schreibt und nach dem letzten ein writeln macht...jetzt hatte ichs ma so probiert, beides gleicher effekt...
mit rewrite funktioniert es, jedoch will ich ja anhängen und nicht immer ne neue datei erstellen...

und jedenfalls fügt er einen umbruch ein...der ja eigentlich im quelltext nicht angeordnet wurde.. :-)

@messi: es gibt dazwischen eigentlich kein zeichen; es wird einfach jedes feld aus der stringgrid bruecke als text ausgelesen und in die zeile geschrieben...ich würde eigtl lieber die stringgrid verwenden, weil ich eigtl alle meine prozeduren schon soweit fertig für stringgrids habe (im export von csv in stringgrids, und auswertungsprozeduren)...nur klappt halt der umstieg von rewrite zu append nicht...'-(

Sir Rufo 27. Feb 2009 11:46

Re: Append_problem mit textfiles
 
öh, warum nicht so?
Delphi-Quellcode:
procedure CSV_export_newgame(Datei:string);
var csv:textfile;
    j :integer;
    zeile:string;
begin
  zeile:='';

  For j:=0 to 71 do
    begin
      If NEW_GAME.Bruecke.Cells[j,0]='' then
        zeile:=zeile+NEW_GAME.BRUECKE.Cells[j,0]+';'
      else
        zeile:=zeile+'"'+ NEW_GAME.Bruecke.Cells[j,0]+ '";';
    end;

  // Sollte jetzt ein Zeilenumbruch (CR+LF oder CR oder LF) hier sein, dann schmeiss den raus
  zeile := StringReplace( zeile, #13#10, '', [ rfReplaceAll ] );
  zeile := StringReplace( zeile,   #10, '', [ rfReplaceAll ] );
  zeile := StringReplace( zeile, #13   , '', [ rfReplaceAll ] );

  // Wir schreiben jetzt in einem Rutsch, dann ist die Datei nicht so lange blockiert :)
  AssignFile(csv, Datei);
  append(csv);
  WriteLn( csv, zeile );
  CloseFile(csv);
end;
oder mal ganz kurz:

Delphi-Quellcode:
procedure CSV_export_newgame(Datei:string);
var
  csv:textfile;
begin
  AssignFile(csv, Datei);
  append(csv);
  WriteLn( csv, NEW_GAME.Bruecke.Rows[ 0 ].DelimitedText );
  CloseFile(csv);
end;
oh, einen habe ich noch ... der trennt dann auch den Anzeige- vom Code-Teil:

Delphi-Quellcode:
...
  NEW_GAME.Bruecke.Rows[ 0 ].Delimiter := ';';
  NEW_GAME.Bruecke.Rows[ 0 ].QuoteChar := '"';
  CSV_export_newgame( '', NEW_GAME.Bruecke.Rows[ 0 ].DelimitedText );
...

procedure CSV_export_newgame(Datei, Zeile:string);
var
  csv:textfile;
begin
  AssignFile(csv, Datei);
  append(csv);
  WriteLn( csv, Zeile );
  CloseFile(csv);
end;

nahpets 27. Feb 2009 11:48

Re: Append_problem mit textfiles
 
Hallo,

guck mal bitte genau nach, ob das Stringgrid da nicht eventuell einen Zeilenumbruch reingemacht hat, bevor Du die Daten ausliest. Bei Leerzeichen und Text, die zusammen breiter sind, als die Stringgridspalte, möchte ich das mal nicht grundsätzlich ausschließen.

homerunjack22 27. Feb 2009 11:55

Re: Append_problem mit textfiles
 
GENIAL...
ich bin begeistert, es funktioniert tadellos...
danke SIR Rufo...und das beste ich versteh sogar den quelltext ;-)
das mit dem #13#10 kannte ich noch nicht, aber wieder was dazugelernt...(is bestimmt auch das was du meinst nahpets)...

gut dann kann ich ja an meinem kleinen projekt weiterschrauben...thx

mfg homerunjack


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:40 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