![]() |
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:
Versuch des Speicherns:
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;
Delphi-Quellcode:
// 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?
Savedialog1.InitialDir:=GetCurrentDir;
for i:= 0 to sgfiles.rowcount-1 do sgfiles.rows.SaveToFile('GetCurrentDir' + sgfiles.Cells[0,i].AsString); |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
Probiere es so:
Delphi-Quellcode:
Grüße vom marabu
var
fn: TFileName; begin fn := IncludeTrailingPathDelimiter(GetCurrentDir) + 'demo.txt'; with sgFiles do Cols[FixedCols].SaveToFile(fn); end; |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
Zitat:
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. ![]() EDIT2: :shock: ach man kann sogar
Delphi-Quellcode:
machen?? cool :mrgreen:
Cols[FixedCols].SaveToFile(fn);
|
Re: SaveToFile [TStringgrid] ohne Tsavedialog
Zitat:
wofür steht die demo.txt? außerdem funzt deine methode nicht :gruebel: |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
Hallo Daniel,
Zitat:
Zitat:
Delphi-Quellcode:
Freundliche Grüße vom marabu
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; |
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:
damit der weiß in welchen ordnern!
Savedialog1.InitialDir:=GetCurrentDir;
muss vll. das alles vor '\' weg? |
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 |
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 |
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:
marabu
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; |
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? |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
:gruebel:
Ich dachte, du möchtest den inhalt des Grid's speichern. Aber du willst nur die "alte Datei" unter neuem/korigiertem namen speichern oder wie? |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
ja sry wenn ich mich falsch ausgedrückt habe.
*missverständnis |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
ohh .. aso ... dann sollte sowas passen
Delphi-Quellcode:
du kannst natürlich auch die beiden Variabeln weglassen und die Cells direkt in MoveFile eingeben ... ich find's so nur anschaulicher.
var
AlteDatei, NeueDatei : String; ... ... for i := 0 to StringGrid1.RowCount-1 do begin AlteDatei := StringGrid1.Cells[0,i]; //die spalte mit dem alten namen des Opendialogs eintragen NeueDatei := StringGrid1.Cells[1,i]; //Die Spalte mit dem neuen bereinigten Namen eigragen MoveFile(AlteDatei,NeueDatei); // falls die alte Datei bleiben soll dann CopyFile(); //MoveFile(StringGrid1.Cells[0,i],StringGrid1.Cells[1,i]); //ohne die var's ^^ end; Ist quasi wie dein eigentlicher code nur, daß du MoveFile benutzen musst .. Hoffe ich habs nun richtig verstanden ^^ PS: Zum zerlegen der Pfadangaben (falls nötig): ExtractFilePath(), ExtractFileName() |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
Zitat:
deine 2thesen habe ich bereits schon erledigt. wenn ich mp3s per topendialog1 ins sgfiles.cells[0,i] lade, ist es doch logisch die datei wieder zu speichern, die eben in der spalte 1 vorliegen. ES GEHT MIR DARUM, DAS DIE DATEIEN DIE PER OPENDIALOG IN DIE SPALTE 1 GELADEN WERDEN - DURCH DIE FILTER FORMATIERT WERDEN (NEUE NAMEN VERGEBEN) - UND ZURÜCKGESCHRIEBEN WERDEN. (ALSO UMBENNEN +SPEICHERN) my try:
Delphi-Quellcode:
procedure Tfmformat.sbsaveClick(Sender: TObject);
var i,sum:integer; procedure SaveGrid(grid: TStringGrid; fileName: string); var iRow: integer; sl: TStringList; begin sl := TStringList.Create; .. ? sl.SaveToFile(fileName); sl.Free; end; begin if change= true then begin Statusbar1.Panels[1].text:='Saved'; Savedialog1.InitialDir:=GetCurrentDir; for i:=0 to Opendialog1.files.count -1 do begin SaveGrid(sgfiles,opendialog1.Files.Strings[i]); end; end; |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
Mein letzter Versuch: Wenn deine Original-Dateinamen mit Pfad in Cols[1] stehen und die durch dein Programm korrigierten Namen ohne Pfad in Cols[0], dann sollte das hier funktionieren:
Delphi-Quellcode:
marabu
procedure RenameFiles(oldNames, newNames: TStrings; skip: Cardinal = 0);
var i: Integer; fp, fn: TFileName; begin for i := skip to Pred(oldNames.Count) do begin fp := ExtracFilePath(oldNames[i]); fn := ExtractFileName(oldNames[i]); if (i < newNames.Count) and not SameText(fn, newNames[i]) then try RenameFile(oldNames[i], fp + newNames[i]); // positive Rückmeldung except // negative Rückmeldung end; end; end; procedure TDemoForm.RenameButtonClick(Sender: TObject); begin with StringGrid do RenameFiles(Cols[1], Cols[0], FixedRows); end; |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
:thumb: jo
lass dich drücken. danke für deine ausdauer :cheers: du bist der erste der mein fertiges programm erhält |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
:gruebel:
Ich hatte doch auch alles gepostet? (bis auf die Copy&Paste-Lösung) ExtractFilePath(), ExtractFileName(), MoveFile() // MoveFile = RenameFile |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
mag sein. sry wenn ich es übersehn habe.
die move methode ware aufjedenfall nix. beschäftige mich im moment mit tstringlists |
Re: SaveToFile [TStringgrid] ohne Tsavedialog
Egal .. hauptsache das Problem wurde trotz der Missverständnisse doch noch gelöst :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:05 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