kostenloser Webspace werbefrei: lima-city


CSV-Datei sauber aufteilen ?

lima-cityForumHeim-PCSoftware

  1. Autor dieses Themas

    supershops

    supershops hat kostenlosen Webspace.

    Hallo

    ich habe eine 50 MB grosse CSV-Datei (mit ca. 60.000 Einträgen=Zeilen)

    diese würde ich gerne in mehrere Dateien aufteilen,
    so dass jede einzelne Datei max. 2 MB hat (so ca.)

    dafür habe ich auch schon Tools gefunden,
    aber die machen was falsch, die trennen nach "bytes"

    ich will beim "Trennen" nicht irgendwo mitten in der Zeile (wenn die Byte erreicht sind)
    sondern nur nach / beim Zeilenumbruch ... so dass keine Zeile "zerissen" wird.

    gibt es vielleicht ein Tool, welches nicht mit Byte, sondern mit "Zeilen" arbeitet?
    Danke!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hi,

    Du könntest sie mit PHP einlesen und dann nach X Zeilen in weitere Dateien schreiben.

    Hier ein Beispiel

    <?php
    /* datei öffnen */
    $dateiname = "deine_CSV_datei...";
    $lines = 1000; /* Anzahl der Zeilen */
    $datei = $zeile = 0;
    $fp = @fopen($dateiname, "w+") or die ("Kann Datei nicht lesen.");
    
    /* datei zeilenweise auslesen */
    while($line = fgets($fp, 1024)){
    	$zeile++;
    	if($zeile == $lines){
    		$datei++;
    		fwrite("CSV_datei_".$datei.".txt",$line);
    	}
    }
    /* datei schliessen */
    fclose($fp);
    ?>


    Ich habs nicht getestet, aber sollte möglich sein,
    Das Prog speichert dir aktuell immer 1000 Zeilen in eine
    TXT-Datei.

    Grüsse
    Color

    Beitrag zuletzt geändert: 13.8.2010 8:00:37 von color
  4. Hallo erstmal,
    ich habe es noch nicht getestet, aber das ist doch genau das, was ich gerade suche...
    warum habe ich nur vorher noch nix von lima-city gewußt.

    herzlichen Dank
    schimmi

  5. Autor dieses Themas

    supershops

    supershops hat kostenlosen Webspace.

    sorry für die sehr späte Antwort

    nicht ganz ... habe es etwas umgewandelt damit es funktioniert
    vorallem muss das Schreiben der Zeile ausserhalb der if-Bedingung, denn
    die funktioniert ja "nur" als Schalter, um alle 1000 Zeilen eine neue Datei anzufangen

    und die neue Datei Nr. 1 muss sogar ausserhalb der while Schleife schon festgelegt werden
    $fp ist zum Lesen (r) der Quelldatei und fpx[] als array zur Erstellung (w+) der neuen Dateien

    vielleicht können ja auch andere was damit anfangen
    hier mein code

    <?php 
    
    $dateiname = "die grosse CSV Datei ...";
    
    $lines = 1000; /* Anzahl der Zeilen */
    
    $datei = 1;   /*  Datei Nummer  */
    $zeile = 0;    /* Zeilen Zähler bis $lines erreicht ist */
    $allez = 0;    /* Gesamt Zeilen Zähler  */
    $fpx = array();  /* handler um neue Dateien zu erstellen */
    
    $godatei = "CSV_datei_".$datei.".txt";  /*  neue $godatei Nr. 1  */
    echo "<br />neue Datei: ".$godatei."\r\n"; 
    
    /* read datei öffnen */
    $fp = @fopen($dateiname, "r") or die ("Kann Datei nicht lesen.");
    
    $fpx[$datei] = @fopen($godatei, "w+") or die ("Kann Datei nicht schreiben.");
    
    /* datei zeilenweise auslesen */
    while($line = fgets($fp, 1024)){
    	$zeile++;
    	if($zeile == $lines){ 
    		fclose($fpx[$datei]); /* die alte $godatei datei schliessen */
    		$datei++;
    		
    		$godatei = "CSV_datei_".$datei.".txt"; 
    		echo "<br />neue Datei: ".$godatei."\r\n";  /*  neue $godatei mit fortlaufender Nr.  */
    		$fpx[$datei] = @fopen($godatei, "w+") or die ("Kann Datei nicht schreiben.");
    		$zeile = 0;  /* Zeilen Zähler zurücksetzen */
    	}
    	fwrite($fpx[$datei],$line); /* in neue datei schreiben */
    	$allez++; 
    }
    /* read datei schliessen */
    fclose($fp);
    
    echo "<br />\r\n"; 
    echo "<br />Zeilen Gesamt: ".$allez."\r\n"; 
    echo "<br />Dateien Gesamt: ".$datei."\r\n"; 
    
    ?>


    ach ja, das array für $fpx ist vielleicht garnicht notwendig
    bei $godatei ist ja auch kein Array, sondern wird direkt überschrieben
    also geht wohl beides, fragt sich was performanter ist ... naja
    ich weiss, nicht grad konsequent, aber funzt ... schön machen geht immernoch

    oder hat jemand noch ne bessere Lösung, um sehr Große CSV Dateien zu splitten?
    ?



    Beitrag zuletzt geändert: 28.8.2011 11:16:09 von supershops
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!