Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Probleme mit Speichern... (https://www.delphipraxis.net/160909-probleme-mit-speichern.html)

Sataan93 7. Jun 2011 14:25

Probleme mit Speichern...
 
Also ich hab das problem, dass der mir die zeilen im String nicht so speichert wie sie gespeichert werden müssen: statt Name;Vorname;Adresse;
Name;Vorname;Adresse; macht es
Vorname;Adresse;Name;Vorname;Adresse..

Delphi-Quellcode:
procedure TForm1.BtSpeichernClick(Sender: TObject);
var
Textdatei: textfile;
i,j: integer;
begin

  if savedialog1.Execute=true then
    begin
      assignfile (textdatei, savedialog1.FileName);
      rewrite (textdatei);
      for i:=1 to StringGrid1.Rowcount-1 do
        for j:=1 to StringGrid1.ColCount-1 do
          begin
            If j = StringGrid1.ColCount then
            writeln(textdatei,stringgrid1.cells[j,i]+';')
            else
           write (textdatei,stringgrid1.cells[j,i]+';');
          end;
     closefile (textdatei);
    end;
end;
ich finde nur den Fehler nicht...

Jumpy 7. Jun 2011 14:29

AW: Probleme mit Speichern...
 
Die Schleifen müssen bei 0 anfangen. Gehen ja auch bis .Count-1

DeddyH 7. Jun 2011 14:31

AW: Probleme mit Speichern...
 
Nicht unbedingt, es kommt darauf an, wie viele FixedRows/FixedCols vorhanden sind.

Deep-Sea 7. Jun 2011 14:37

AW: Probleme mit Speichern...
 
  1. Delphi-Quellcode:
    savedialog1.Execute=true
    Lass das "= True" weg.
  2. j kann niemals gleich StringGrid1.ColCount sein, wenn die Schleife nur bis StringGrid1.ColCount - 1 geht.

DeddyH 7. Jun 2011 14:54

AW: Probleme mit Speichern...
 
Und wenn man jetzt noch weiß, dass TStringGrid.Rows vom Typ TStrings ist, dann kann man es sich viel leichter machen.

Deep-Sea 7. Jun 2011 14:57

AW: Probleme mit Speichern...
 
@DeddyH:
Ich zitiere dich mal: *Pff* viel zu einfach, da könnte ja jeder kommen :lol:
:P

DeddyH 7. Jun 2011 15:00

AW: Probleme mit Speichern...
 
Zumindest habe ich nicht verraten, wie es geht :tongue:

p80286 7. Jun 2011 15:08

AW: Probleme mit Speichern...
 
Zitat:

Zitat von Sataan93 (Beitrag 1105069)
Also ich hab das problem, dass der mir die zeilen im String nicht so speichert wie sie gespeichert werden müssen: statt Name;Vorname;Adresse;
Name;Vorname;Adresse; macht es
Vorname;Adresse;Name;Vorname;Adresse..

Fehlt Dir vllt. der jeweils erste Name in einer Zeile? siehe #2
Gruß
K-H

edit:
etwa rows[i].text?

DeddyH 7. Jun 2011 15:26

AW: Probleme mit Speichern...
 
Nicht Text, sondern CommaText in Verbindung mit ein paar anderen Properties.

Jumpy 7. Jun 2011 15:38

AW: Probleme mit Speichern...
 
Zitat:

Zitat von DeddyH (Beitrag 1105074)
Nicht unbedingt, es kommt darauf an, wie viele FixedRows/FixedCols vorhanden sind.

Da ja der erste Name fehlt muss wahrsch. zumindest j=0 sein. Oft gibt es ja keine FixedCols.
FixedRows mit einer Kopfzeile ist da schon wahrscheinlicher, deswegen i=1 wahrsch. richtig...Es sei denn du merkst, dass dir ein Datensatz fehlt.

Deep-Sea's Einwand 2 in #4 würde erklären, wieso alles hintereinandergeknallt wird ohne Zeilenumbruch nach jedem Datensatz.

DeddyH 7. Jun 2011 15:40

AW: Probleme mit Speichern...
 
Man kann das doch einfach in den jeweiligen Schleifenkopf einbauen, dann sollte es immer passen:
Delphi-Quellcode:
for i := StringGrid1.FixedRows to StringGrid1.RowCount - 1 do
  for j := StringGrid1.FixedCols to StringGrid1.ColCount - 1 do

Jumpy 7. Jun 2011 15:52

AW: Probleme mit Speichern...
 
Das ist mal schlau gedacht:thumb:.
Wieso fällt mir sowas nicht mal ein.

DeddyH 7. Jun 2011 15:57

AW: Probleme mit Speichern...
 
Man muss sich nur oft genug ärgern, dass man irgendeine Sache nicht bedacht hat, dann sucht man irgendwann automatisch nach solchen Lösungen :zwinker:

p80286 7. Jun 2011 16:00

AW: Probleme mit Speichern...
 
Zitat:

Zitat von DeddyH (Beitrag 1105092)
Nicht Text, sondern CommaText in Verbindung mit ein paar anderen Properties.

Ich hab
Code:
writeln(stringgrid.cells[a,b])
gesehen,das
Code:
+';'
ist mir ganz durchgerutscht. Da stimmt wohl einiges nicht.

Gruß
K-H

Sataan93 8. Jun 2011 08:03

AW: Probleme mit Speichern...
 
So ich hab es jetzt erstmal so umgestellt:

Delphi-Quellcode:
procedure TForm1.BtSpeichernClick(Sender: TObject);
var
Textdatei: textfile;
z:integer;
begin
  if savedialog1.Execute=true then
    begin
    assignfile(Textdatei,savedialog1.FileName);
      for z:=1 to stringgrid1.RowCount-1 do
  writeln(Textdatei,stringgrid1.cells[0,z]+';'+stringgrid1.cells[1,z]+';'+stringgrid1.cells[2,z]+';'+stringgrid1.cells[3,z]+';'+stringgrid1.cells[4,z]+';'+stringgrid1.cells[5,z]+';'+stringgrid1.cells[6,z]+';'+stringgrid1.cells[7,z]+';');
    end
    else
      begin
      showmessage('Dateiladefehler! Ladevorgang abgebrochen.');
      end;
closefile(Textdatei);
end;
Das löst zwar mein Problem, aber sieht nich soo schick aus...

Sir Rufo 8. Jun 2011 08:08

AW: Probleme mit Speichern...
 
Wenn du schreibst
Delphi-Quellcode:
for j := 0 to StringGrid1.ColCount -1
wann trifft wohl die Bedingung
Delphi-Quellcode:
If j = StringGrid1.ColCount then
zu? ;)

Sataan93 8. Jun 2011 08:21

AW: Probleme mit Speichern...
 
ach ich gebs auf -.-
danke für eure Hilfe... ^^
das Programm geht garnichmehr ich lass es bleiben.
Soll mein lehrer mal drüber gucken, ich mach es nichmehr! ich bin keine Kämofernatur :P

DeddyH 8. Jun 2011 08:25

AW: Probleme mit Speichern...
 
Wie wäre es denn hiermit (Fehlerbehandlung bzgl. Dateioperationen weggelassen)?
Delphi-Quellcode:
procedure TForm1.BtSpeichernClick(Sender: TObject);
var
  Textdatei: textfile;
  z, i: integer;
  sl: TStringList;
begin
  if savedialog1.Execute then
    begin
      sl := TStringlist.Create;
      try
        Assignfile(Textdatei, savedialog1.FileName);
        for z := StringGrid1.FixedRows to StringGrid1.RowCount - 1 do
          begin
            sl.Assign(StringGrid1.Rows[z]);
            for i := 0 to StringGrid1.FixedCols - 1 do
              sl.Delete(0);
            sl.Delimiter := ';';
            sl.StrictDelimiter := true; //nur auf aktuellen Delphi-Versionen
            WriteLn(Textdatei, sl.DelimitedText);
          end;
        CloseFile(Textdatei);
      finally
        sl.Free;
      end;
    end;
end;

p80286 8. Jun 2011 10:25

AW: Probleme mit Speichern...
 
Ich denke da fehlt ein
Delphi-Quellcode:
 Assignfile(Textdatei, savedialog1.FileName);
 Rewrite(Textdatei);{--------------------------------------------------------!!!!}
 for z := StringGrid1.FixedRows to StringGrid1.RowCount - 1 do
....................
 CloseFile(Textdatei);
oder ein "Append" ?

Gruß
K-H

DeddyH 8. Jun 2011 10:28

AW: Probleme mit Speichern...
 
Stimmt, das ist mir völlig entgangen.

p80286 8. Jun 2011 10:33

AW: Probleme mit Speichern...
 
Nicht nur bei Dir:
Delphi-Quellcode:
procedure TForm1.BtSpeichernClick(Sender: TObject);
var
Textdatei: textfile;
z:integer;
begin
  if savedialog1.Execute=true then
    begin
    assignfile(Textdatei,savedialog1.FileName);
{--}Rewrite(TestDatei); {-------------------------------------}
      for z:=1 to stringgrid1.RowCount-1 do
  writeln(Textdatei,stringgrid1.cells[0,z]+';'+stringgrid1.cells[1,z]+';'+stringgrid1.cells[2,z]+';'+stringgrid1.cells[3,z]+';'+stringgrid1.cells[4,z]+';'+stringgrid1.cells[5,z]+';'+stringgrid1.cells[6,z]+';'+stringgrid1.cells[7,z]+';');
    end
    else
      begin
      showmessage('Dateiladefehler! Ladevorgang abgebrochen.');
      end;
closefile(Textdatei);
end;
Gruß
K-H

DeddyH 8. Jun 2011 10:35

AW: Probleme mit Speichern...
 
Ja, ich weiß, ich hatte ja den Originalcode übernommen und lediglich geändert. Dabei ist mir eben nicht aufgefallen, dass die Datei gar nicht angelegt wird.

Deep-Sea 8. Jun 2011 10:49

AW: Probleme mit Speichern...
 
Man könnte ja auch einfach Streams nutzen, anstatt diese Relikte wie AssignFile und Co. :stupid:


@Sir Rufo:
Das hatte ich ja schon erwähnt :P

DeddyH 8. Jun 2011 10:54

AW: Probleme mit Speichern...
 
Oder man nimmt noch eine zweite Stringliste, baut diese aus den "zusammengeklebten" Zeilen auf und speichert sie am Schluss ab. Es gibt immer mehrere Möglichkeiten ;)


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