Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SaveToFile [TStringgrid] ohne Tsavedialog (https://www.delphipraxis.net/69126-savetofile-%5Btstringgrid%5D-ohne-tsavedialog.html)

danku 10. Mai 2006 15:12


SaveToFile [TStringgrid] ohne Tsavedialog
 
Ich möchte nur die 1.Spalte einer TStringGrid speichern. Es soll kein Tsavedialog geoeffnet werden.
ich arbeite ohne Tstrings!

ausgelesen mit:

Delphi-Quellcode:
sgfiles.RowCount := OpenDialog1.Files.Count + 1;
   for i:=0 to Opendialog1.files.count -1 do
   begin
   sgfiles.cells[0,1 + i]:= (OpenDialog1.Files[i]);
   Savedialog1.InitialDir:=GetCurrentDir;
Versuch des Speicherns:

Delphi-Quellcode:
Savedialog1.InitialDir:=GetCurrentDir;
   for i:= 0 to sgfiles.rowcount-1 do
   sgfiles.rows.SaveToFile('GetCurrentDir' + sgfiles.Cells[0,i].AsString);
// klassentyp oder recordtyp wird erfordet. ich weiß. for i := 0 to sl.Count - 1 do aber kann ich das auch ohne eine Tstringlist realisieren? wenn ja wie?

marabu 10. Mai 2006 15:41

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
Probiere es so:

Delphi-Quellcode:
var
  fn: TFileName;
begin
  fn := IncludeTrailingPathDelimiter(GetCurrentDir)
      + 'demo.txt';
  with sgFiles do
    Cols[FixedCols].SaveToFile(fn);
end;
Grüße vom marabu

TeronG 10. Mai 2006 15:42

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
Zitat:

Zitat von danku
Es soll kein Tsavedialog geoeffnet werden.

muss ja auch nicht .. der is ja nur da, damit der User nen ort angeben kann.
Wenn du dich dazu überwinden könntest eine TStringList zu nehmen könntest du mit .SaveToFile() arbeiten.
EDIT: :oops: ach ja .. und wenn nicht dann hilft evtl. das hier bzw. [dp]Dyn* Array Speichern[/dp]

EDIT2: :shock: ach man kann sogar
Delphi-Quellcode:
Cols[FixedCols].SaveToFile(fn);
machen?? cool :mrgreen:

danku 10. Mai 2006 18:09

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
Zitat:

Zitat von marabu
Probiere es so:

Delphi-Quellcode:
var
  fn: TFileName;
begin
  fn := IncludeTrailingPathDelimiter(GetCurrentDir)
      + 'demo.txt';
  with sgFiles do
    Cols[FixedCols].SaveToFile(fn);
end;
Grüße vom marabu


wofür steht die demo.txt?
außerdem funzt deine methode nicht :gruebel:

marabu 10. Mai 2006 19:09

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
Hallo Daniel,

Zitat:

Zitat von danku
wofür steht die demo.txt?

es ist nur ein Platzhalter - ich dachte du würdest selbst die noch nötigen Änderungen machen. Immerhin hast du Pascal als eines deiner Wissensgebiete angegeben.

Zitat:

Zitat von danku
außerdem funzt deine methode nicht

Es ist höchst unwahrscheinlich, aber was wäre, wenn du einen Fehler bei der Anwendung der Methode gemacht hättest?

Delphi-Quellcode:
uses
  StrUtils;

function SaveColumn(sg: TStringGrid; index: Integer; keepHeader: Boolean = false): Boolean;
var
  fn: TFileName;
begin
  Result := false;
  if sg.RowCount = 0 then
    Exit;
  with TStringList.Create do
  try
    Assign(sg.Cols[index]);
    fn := IncludeTrailingPathDelimiter(GetCurrentDir)
        + Strings[0];
    if not keepHeader then
      Delete(index);
    SaveToFile(fn);
    Result := true;
  finally
    Free;
  end;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  ShowMessage(IfThen(SaveColumn(StringGrid, 0), 'holiday', 'kill the cat'));
end;
Freundliche Grüße vom marabu

danku 10. Mai 2006 21:30

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
klar das mit dem platzhalter ist mir schon klar aber für mich sieht der überlüssig aus. d.h. der ist gar nicht notwendig.
zum code:
ich meine theoretisch müsste der ja speichern aber praktisch sieht das ganz anders aus.

inhalt von cells[0,1]:='D:\+MUSIK\ashanti_-_cant_stop.mp3'

der speichert nicht obwohl ich noch geaddet habe:
Delphi-Quellcode:
Savedialog1.InitialDir:=GetCurrentDir;
damit der weiß in welchen ordnern!

muss vll. das alles vor '\' weg?

marabu 11. Mai 2006 06:58

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
Guten Morgen.

Du hast geschrieben, dass du ohne einen SaveDialog speichern möchtest - dann lasse diese Komponente auch einfach weg. Es hilft nicht, wenn du die Eigenschaft InitialDir von SaveDialog auf GetCurrentDir setzt, da die Komponente diese Information nur verwendet um das Navigieren im Dateisystem zu vereinfachen. Den absoluten Dateinamen kannst du einfach bei SaveToFile() selbst eintragen. Dazu kannst du ein Verzeichnis und einen relativen Dateinamen verknüpfen - aber nicht zwei absolute Angaben.

Ich habe jetzt das Gefühl, dass du garnicht den Inhalt der ersten Spalte deines StringGrids speichern willst. Außerdem ist es nicht sinnvoll die Zeichenketten aus deinem StringGrid in eine Datei mit der Erweiterung MP3 zu schreiben. Das Beste wird sein, wenn du mal einen screen shot von deinem StringGrid mit ein paar Daten anhängst und dazu genau beschreibst, was du erreichen willst.

Freundliche Grüße

marabu

danku 11. Mai 2006 07:35

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
Liste der Anhänge anzeigen (Anzahl: 1)
naja man kann die dateien über einen topendialog in die tstringgrid laden.
das dumme ist noch, dass der komplette pfad mit in die zellen eingebunden wird.

der wiedergebene inhalt des topendialogs steht in spalte 1.
in spalte 2 steht der originalname der date und in der 2.spalte die dateigrössse.

anhand eines filters kann man die funktion "sonderzeichen entfernen" erweitern.
weitere methoden sind: großschreibung der wörter (in spalte 1) und das ganze in Winamp öffnen.

mein problem besteht noch bei der save-methode.

bild meines progs ist im anhang

marabu 11. Mai 2006 08:18

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
Wenn du einen vollständigen Dateinamen hast und möchtest den Namen ohne Pfadanteil, dann verwende die Funktion ExtractFileName().

Meine Speicherroutine in Beitrag #5 geht aufgrund von Informationslücken davon aus, dass der Dateiname in der Titelzeile steht. Hier jetzt eine angepasste Version, der du den Speichernamen mitgeben kannst:

Delphi-Quellcode:
uses
  StrUtils;

function SaveColumn(fn: TFileName; sg: TStringGrid; index: Integer;
  keepHeader: Boolean = false): Boolean;
begin
  Result := false;
  if sg.RowCount = 0 then
    Exit;
  with TStringList.Create do
  try
    Assign(sg.Cols[index]);
    if not keepHeader then
      Delete(index);
    SaveToFile(fn);
    Result := true;
  finally
    Free;
  end;
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  ShowMessage(IfThen(SaveColumn('playlist.txt', StringGrid, 0), 'holiday', 'kill the cat'));
end;
marabu

danku 11. Mai 2006 13:13

Re: SaveToFile [TStringgrid] ohne Tsavedialog
 
jetzt weiß ich erst mal was du meinst :)

ich will nicht die spalte1 in einer txt(dein platzhalter ;)) speichern sondern die dateien, die man per topendialog in die 1.spalte lädt, die dateien sollen gespeichert werden. (z.b. wenn man eben sonderzeichen entfernt und speichern drückt, dann soll die urspgs.datei umbenannt werden.

wieso speichert der überhaupt deine .txt in den ordner, wo die mp3s sind?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 Uhr.
Seite 1 von 2  1 2      

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