![]() |
Text Datei teilen
Hi alle zusammen hab wieder nen Problem!
Ich hab ne Große Txt Datei und möchte dieser gerne in kleiner 1 mb Teile teilen. Also schnell rann gesetzt und nen Programm gecodet aber leider komm ich am entscheidenden Punkt nicht weiter deshlab bräuchte ich eure Hilfe. Also die Text datei wird in eine Memo geladen. So jetzt gibst denk mal zwei Möglichkeiten entweder man lässt ihn immer nach 5000 zeilen in ein neues Text dokument speichern oder vllt kann man ihm irgendwie sagen wenn 1.txt = 1 mb groß dann mache neue datei mit dem namen 2.txt = 1mb immer so weiter obwohl mir variante 1 auch reichen würde immer nach 5000 zeilen ich weiß nur nicht wie man das schreibt. ER müsste theroretisch immer 5000zeilen in eine weitere Memo adden und dann speichern und memo clearen. Und dann bei der riesen txt datei aus memo1 bei zeile 5001 bist 10000 wieder nehmen und wieder in die andere adden und speichern! Ich hoffe ihr könnt mir bei diesem problem behilflich sein Danke im Vorraus Crazymodder |
Re: Text Datei teilen
Öffne die Datei in einem Stream, in einem 2. Stream kannst du dann die gwünschte Anzahl von Daten Speichern-
|
Re: Text Datei teilen
Hallo,
ich würde es zwar bevorzugen zu Prüfen, ab 1 MB erreicht ist, aber wenn dir die andere Variate reicht, dann mach es so. Ich würde ein Schleife in einer anderen schachteln z.b.
Delphi-Quellcode:
Ich hoffe ich kommte dir ein bisschen helfen.
for i:=1 to AnzahlderFiles do // AnzahlderFiles kannst du vorher gerechnen AnzahlderFiles=AnzahlderZeilen / 5000
begin for j:=1 to 5000 do begin // Hier einfach in die neue txt schreiben end; end; MFG Christian18 |
Re: Text Datei teilen
Wenn Du die Daten jeweils nach einem Zeilenende trennen willst, genügt TStream wohl nicht. (Bei einem Stream sparst Du Dir das Einlesen der gesamten Quelldatei). Dann nimm aber statt TMemo lieber TStringList; da entfällt die visuelle Verbindung (die kostet vor allem bei großen Dateien Speicher und Zeit). Mein Konzept:
Code:
Kannst Du damit etwas anfangen? Jürgen
var Quelle, Ziel: TStringList;
Summe := 0; Start := 0; for (alle Zeilen der Quelle) addiere die Länge der aktuellen Zeile zur Summe kopiere die aktuelle Zeile nach Ziel wenn Summe >= 1 MB Ziel.SaveToFile Ziel.Clear Summe := 0 end finally Ziel.Clear |
Re: Text Datei teilen
Mh naja so ganz noch nicht.
Mh also die txt Datei ist ca 100mb groß. Mh aber so ganz versteh ich nicht wie das geht! Könntest du das vllt mal konkret schreiben wäre dir sehr dankbar. Also nur diesen Teil das reicht den rest bekomme ich auch hin. Danek im Vorraus |
Re: Text Datei teilen
Für welchen der drei Vorschläge brauchst Du denn genauere Informationen? Jürgen
|
Re: Text Datei teilen
Mg joa zu deiner Idee!
var Quelle, Ziel: TStringList; Summe := 0; Start := 0; for (alle Zeilen der Quelle) addiere die Länge der aktuellen Zeile zur Summe kopiere die aktuelle Zeile nach Ziel Da wie macht man das halt mit der Summe! Oder bei der for Schleife. Also wäre sehr nett wenn ich dazu noch einige Info's bekommen könnte. Ich hoffe das das nicht zu viel arbeit macht. Danke im Vorraus Crazymodder |
Re: Text Datei teilen
Also gut; die Prozedur kann in das Formular, ein Datenmodul oder "sonstwo" eingebunden werden.
Delphi-Quellcode:
Bei der Summe habe ich immer 2 Zeichen addiert wegen CR/LF.
// sQuelldatei ist der vollständige Dateiname
// sZieldatei ist als Format-String gedacht: "E:\Temp\Geteilt_%3.d.Txt", // dort wird der Zähler der Teildateien eingefügt // iMaximum ist die maximale Anzahl von Zeichen pro Teildatei procedure DateiTeilen(const sQuellDatei: string; const sZielDatei: string; const iMaximum: int); var aQuelle, aZiel: TStringList; iSumme, iStart, iZaehler, x0: int; begin // Initialisierungen iSumme := 0; iStart := 0; iZaehler := 0; aQuelle := TStringList.Create; aZiel := TStringList.Create; try // Quelle einlesen aQuelle.LoadFromFile(sQuellDatei); // bearbeite alle Zeilen for x0:= 0 to aQuelle.Count - 1 do begin Inc(iSumme, aQuelle[x0]+2); // wenn diese Summe schon zuviel ist, dann neue Teildatei erzeugen if iSumme > iMaximum then begin Inc(iZaehler); aZiel.SaveToFile( Format(sZielDatei, [iZaehler]) ); // Daten zurücksetzen aZiel.Clear; iSumme := aQuelle[x0] + 2; end; // aktuelle Zeile kopieren aZiel.Add(aQuelle[x0]); end; // letzte Teildatei speichern Inc(iZaehler); aZiel.SaveToFile( Format(sZielDatei, [iZaehler]) ); finally aQuelle.Free; aZiel.Free; if iZaehler > 0 then ShowMessage( Format("%d Teildateien erzeugt", iZaehler) ); end; end; Was Dir jetzt noch fehlt, bitte selbst überlegen und unter ![]() Gruß Jürgen |
Re: Text Datei teilen
Danke Danek sehr nett das ist perfekt danek so versteh ichs danke nochmal i love it thx
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:10 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