AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Text Datei teilen

Ein Thema von Crazymodder · begonnen am 22. Feb 2007 · letzter Beitrag vom 23. Feb 2007
Antwort Antwort
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#1

Text Datei teilen

  Alt 22. Feb 2007, 21:21
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Text Datei teilen

  Alt 22. Feb 2007, 21:26
Öffne die Datei in einem Stream, in einem 2. Stream kannst du dann die gwünschte Anzahl von Daten Speichern-
Markus Kinzler
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#3

Re: Text Datei teilen

  Alt 22. Feb 2007, 21:29
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:
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;
Ich hoffe ich kommte dir ein bisschen helfen.

MFG Christian18
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#4

Re: Text Datei teilen

  Alt 23. Feb 2007, 10:39
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:
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
Kannst Du damit etwas anfangen? Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#5

Re: Text Datei teilen

  Alt 23. Feb 2007, 14:33
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
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#6

Re: Text Datei teilen

  Alt 23. Feb 2007, 15:14
Für welchen der drei Vorschläge brauchst Du denn genauere Informationen? Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#7

Re: Text Datei teilen

  Alt 23. Feb 2007, 15:28
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
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#8

Re: Text Datei teilen

  Alt 23. Feb 2007, 16:23
Also gut; die Prozedur kann in das Formular, ein Datenmodul oder "sonstwo" eingebunden werden.
Delphi-Quellcode:
// 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;
Bei der Summe habe ich immer 2 Zeichen addiert wegen CR/LF.

Was Dir jetzt noch fehlt, bitte selbst überlegen und unter Delphi-Referenz durchsuchenDelphi heraussuchen. Nicht getestet und ohne Gewähr - siehe Signatur.

Gruß Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Crazymodder

Registriert seit: 28. Dez 2006
69 Beiträge
 
#9

Re: Text Datei teilen

  Alt 23. Feb 2007, 17:32
Danke Danek sehr nett das ist perfekt danek so versteh ichs danke nochmal i love it thx
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 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