Ankündigung

Einklappen
Keine Ankündigung bisher.

Abbruch beim Auslesen einer Textdatei

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Abbruch beim Auslesen einer Textdatei

    Hallo zussammen,

    ich stehe hier vor einem Rätsel und finden keine Antwort. Ich lese eine Textdatei aus in dem ich Sie komplett durchlaufe ujnd Zeichen für Zeichen auslese.

    $fp = fopen('TEST.DAT', 'r') or die("Kein Zugriff auf die TEST.dat");
    WHILE ( ! feof ($fp) ) {
    ...
    }

    Ein bestimmt Anzahl an Zeichen ergibt dann immer den Inhalt für eine Variable und nach jedem Zeilenumbruch werden die Daten dann in die MySQL Tabelle geschrieben. Das funktioniert offline (habe xampp installiert) super! Ich habe dann zwei Tabellen. In der einen ca. 55000 Datensätze in der anderen ca. 5000 Datensätze. Jetzt lade ich das Script ins internet und änderen noch die Daten für Datenbank, Server usw und lasse es laufen. Nach ca. 5000 Datensätzen, die aber alle korrekt eingetragen werden sagt der Browser "fertig" und macht nichts mehr. Was ist mit den restelichen Daten. Es kommt keine Fehlermeldung und nichts. Er hört einfach auf. Das komische ist auch daß die Anzahl der Datensätze die eingetragen immer schunterschiedlich ist. Es schwankt immer zwischen 2000 und 5000 Einträgen. Ich weiß jetzt einfach nicht mehr wo ich den Fehler suchen soll. Habe auch schon unterschiedliche Browser ausprobiert. Aber immer das gleiche Lokal läufts einwandfrei und im Netz eben nicht.

    Bin schon mal Dankbar für Euro Lösungsvorschläge


  • #2
    Re: Abbruch beim Auslesen einer Textdatei

    Zitat von workaholic
    in der anderen ca. 5000 Datensätze. Jetzt lade ich das Script ins internet und änderen noch die Daten für Datenbank, Server usw und lasse es laufen. Nach ca. 5000 Datensätzen, die aber alle korrekt eingetragen werden sagt der Browser "fertig" und macht nichts mehr.
    Hm? Dann verwendest du wohl die Datei mit den nur 5000 Datensätzen?!
    Wenn du nicht mehr vom Code preisgibst, können wir dir nicht helfen. Der Inhalt der while ()-Schleife sowie ein oder zwei Zeilen der TEST.dat wären auch nicht schlecht...

    Lass dir doch testweise alle Informationen anzeigen, die du aus der Datei liest und die du in die Datenbank schreibst (also eine Art Log-Datei).

    Kommentar


    • #3
      Tag,

      timeouted sich vielleicht das Script auf dem Server?
      Kann es sein, daß das Script für den Server einfach zu lange läuft?

      Wenns Dein eigener Internetserver ist, oder kein safemode aktiviert ist probier mal per set_time_limit das Timeout einfach zu verzögern oder ganz zu deaktivieren.

      Kommentar


      • #4
        Hmm, also die richtigen Dateien verwende ich auf jeden Fall. Es sind ja auch immer unterschiedlich viele Datensätze die in die Tabelle geschrieben werden. Ein Log Datei habe ich mir auch schon erstellt -> wird auch alles richtig aufgelistet und hört eben einfach irgendwann auf, immer wo anderes ohne Grund. Habe auch schon an ein Timeout gedacht aber das läuft höchstens zwischen 15 und 25 Sekunden. Außerdem müßte doch dann die Fehlermeldung mit dem Timeout kommen. Aber es passiert einfach gar nichts mehr. Schon seltsam.

        Ich habe euch hier auch noch einen Auszug aus dem Script aber ich weiß nicht ob das weiterhilft. Denn ein Fehler ist ja nicht drin und funktioniert tuts lokal ja auch einwandfrei.


        $fp = fopen('TEST.DAT', 'r') or die("Kein Zugriff auf die TEST.dat");

        $zeichen_counter = 0;

        WHILE ( ! feof ($fp) ) {

        $zeichen_counter++;

        $zeichen = $zeichen.fread($fp,1);

        SWITCH ($zeichen_counter) {

        CASE 6:

        $dat_artikelnummer = $zeichen;
        $zeichen = "";
        break;

        CASE 10:
        $dat_groesse_stichformat = $zeichen;
        $zeichen = "";
        break;

        CASE 13:
        $dat_groesse_millimeter = $zeichen;
        $zeichen = "";
        break;

        // Das Geht jetzt so weiter bis CASE 180 und dann wird der $zeichen_counter wieder auf 0 gesetzt
        // und die Daten in die Tabelle geschreiben.
        // ...


        CASE 180:


        $insert = "INSERT INTO test ( user_id, artikelnummer, int_artikelnummer, groesse_stichformat, groesse_millimeter, bezeichnung1, bezeichnung2, sonderkennzeichen, verkaufsprogramm, barcode, firmenkennzeichen, einkaufspreis_euro, verkaufspreis_euro, kartongroesse, farbnummer, modellnummer, materialart, schnallenart, fussbett, sohlenart, artikeltyp, sofortlieferkennzeichen, boersenkennzeichen, auslaufstufe, modestufe, sortimentsinhalt, artikeldatum, bestand, boersenrabatt, weite, warennummer, produktlinie, sortimentsstart, sortimentsverteilung, platzhalter, modmat3_nr ) VALUES ( '$user_id', '$dat_artikelnummer', '$dat_artikelnummer', '$dat_groesse_stichformat', '$dat_groesse_millimeter', '$dat_bezeichnung1', '$dat_bezeichnung2', '$dat_sonderkennzeichen', '$dat_verkaufsprogramm', '$dat_barcode', '$dat_firmenkennzeichen', '$dat_einkaufspreis_euro', '$dat_verkaufspreis_euro', '$dat_kartongroesse', '$dat_farbnummer', '$dat_modellnummer', '$dat_materialart', '$dat_schnallenart', '$dat_fussbett', '$dat_sohlenart', '$dat_artikeltyp', '$dat_sofortlieferkennzeichen', '$dat_boersenkennzeichen', '$dat_auslaufstufe', '$dat_modestufe', '$dat_sortimentsinhalt', '$dat_artikeldatum', '$dat_bestand', '$dat_boersenrabatt', '$dat_weite', '$dat_warennummer', '$dat_produktlinie', '$dat_sortimentsstart', '$dat_sortimentsverteilung', '$dat_platzhalter', '$modmat3_nr' )";
        $insert_result = mysql_query( $insert );

        IF ( ! $insert_result ) {

        // Vermerken bei wechlen Artikelnummern es zu Fehlern gekommen ist.
        //-------------------------------------------------------------------------------------------------------------------------------------------

        $uebernahme_fehler = $uebernahme_fehler."Artikelnummer: $dat_artikelnummer - Größe: $dat_groesse_stichformat
        ";

        }

        $zeichen_counter = 0;

        break;

        DEFAULT:

        }

        }

        Kommentar


        • #5
          Die Art und Weise wie du die Datei ausliest mißfällt mir irgendwie sehr.
          Gib doch eine Zeile deiner Test.dat mal an (von mir aus auch verändert). Vielleicht können wir dir dann eine effizientere Lösung vorschlagen?
          Würde jetzt schon ein zeilenweises Einlesen + substr() vorschlagen anstatt diesem Zeichenweisen. Das ist meiner Meinung nach Murgs.

          Außerdem ist deine Großschreibung von IF, DEFAULT, SWITCH, CASE mehr als unüblich. Großschreibung sollte nur für Konstanten verwendet werden (IST natürl. Geschmaksache abah wen ale sych DRAN halt en kan mann S beßer lessen)

          Kommentar

          Lädt...
          X