![]() |
File-Splitter
Ich muss für den Informatikunterricht einen Fils-Splitter schreiben und soll den Datentyp FILE benutzen. Wie muss ich denn das Probelm lösen? Das Programm soll Daten in mehrere Teile unterteilen und hinterher auch wieder zusammensetzten können. Die Datengröße soll frei bestimmbar sein. So wäre für ein paar Ansätze sehr Dankbar oder auch für ein paar Syntax Beispiele für den Typ File. Hab damit noch nicht gearbeitet.
|
Re: File-Splitter
Hier findest du eine Klasse von mir dafür:
![]() Und hier ein Programm mit Source: ![]() Ohne zusammenfügen. geht aber im Prinzip genauso nur umgekehrt. :mrgreen: |
Re: File-Splitter
jo danke. werd ich mir mal anschauen.
|
Re: File-Splitter
Das Problem soll möglichst mit Blockread und Blockwrite gelößt werden.
|
Re: File-Splitter
Nun geht im Prinzip genauso, wie bei dem FileSplitter Programm.
|
Re: File-Splitter
Ja, hab jetzt schon geschaft ganze Dateien zu kopieren. Dann wird das andere auch nicht mehr so schwierig sein.
200ster Beitrag :-D |
Re: File-Splitter
So jetzt hab ich wieder ein Problem. Ich hab eine Procedur, mit der ich eine Datei in 2 gleich große Dateien splitten will.
Code:
Das hab ich jetzt mit BlockRead und BlockWrite gekößt. Ich lese zuerst die 1, Hälfte aus und speicher die in eine Datei ab und dann die 2. Hälfte. Jetzt weiß ich aber nicht was ich als weitere Parrameter für BlockRead und BlockWrite angeben muss. Irgendwie brauche ich ja noch einen Buffer. In der Online Hilfe hab ich da nicht richtig durchgeblickt. Hier mal mein Code
f = Datei, die ich splitten will
f1 = 1. Hälfte f2 = 2. Hälfte
Delphi-Quellcode:
So wäre für Hilfe sehr dankbar.
procedure TForm1.Button5Click(Sender: TObject);
var f,f1,f2 : file; s,s1,s2 : string; g : longint; begin //Datei öffnen OpenDialog1.Execute; s := OpenDialog1.FileName; if FileExists(s) then begin AssignFile(f,s); g := FileSize(f); //1.Datei AssignFile(f1,s + '01'); Rewrite(f1); BlockRead(f,????,????); BlockWrite(f1,????,????); //in der Datei vorspringen Seek(f,g div 2); //2.Datei AssignFile(f2,s + '02'); Rewrite(f2); BlockRead(f,????,?????); BlockWrite(f1,????,????); CloseFile(f); CloseFile(f1); CloseFile(f2); end; end; |
Re: File-Splitter
Habs nochmal in den Vorderrgrund geholt.
Hoffe ihr habt nichts dagegen. :duck: |
Re: File-Splitter
In der OH is doch n Beispiel:
Delphi-Quellcode:
So habs ich es verstanden:
var
FromF, ToF: file; NumRead, NumWritten: Integer; Buf: array[1..2048] of Char; begin if OpenDialog1.Execute then { Öffnen-Dialogfeld anzeigen } begin AssignFile(FromF, OpenDialog1.FileName); Reset(FromF, 1); { Datensatzgröße = 1 } if SaveDialog1.Execute then { Speichern-Dialogfeld anzeigen } begin AssignFile(ToF, SaveDialog1.FileName); { Ausgabedatei öffnen } Rewrite(ToF, 1); { Datensatzgröße = 1 } Canvas.TextOut(10, 10, 'Copying ' + IntToStr(FileSize(FromF)) + ' bytes...'); repeat BlockRead(FromF, Buf, SizeOf(Buf), NumRead); BlockWrite(ToF, Buf, NumRead, NumWritten); until (NumRead = 0) or (NumWritten <> NumRead); CloseFile(FromF); CloseFile(ToF); end; end; end;
Delphi-Quellcode:
buf:
Delphi-Syntax:
procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]); wenn du einen Block einlesen möchtest, dann must du das eingelsene ja irgendwo reinschreiben ! count: Anzahl der zu übertragenen "Stücke" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 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