php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 08.05.2009, 08:16  
Benutzer
 
Registriert seit: 04.11.2008
Beiträge: 41
Jacke befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Datei bearbeitung (Verwaltungsgrenzen)

Hallo Leute,
ich bin dabei .ASC Dateien zu bearbeiten, welche um die 70.000 Zeilen �* 400 Zeichen enthalten.

Nur leider habe ich in der Entwicklungsphase mit einer Datei von 800 Zeilen gearbeitet.
Alle Datensätze habe ich in ein Array geschrieben, weil ich eigentlich ohne Datenbank arbeiten wollte, nun komm ich aber nicht drum rum.

Wenn ich in ein Array schreiben lasse muss ich erstmal den Speicher hoch setzten, damit er überhaupt anfängt.

PHP-Code:
ini_set("memory_limit""80M"); 
Leider durchsucht er meine Dateien (die Große) aber nicht effizient, er findet keine Datensätze. Woran es liegt kann ich nicht genau sagen aber ich habe den Verdacht, dass vielleicht ein unsichtbare Codierungfehler in der Datei. Woher der Verdacht kommt steht unten.

Bei meiner Testdatei (die Kleine) funktioniert alles wunderbar.

Also wollte ich gern jede Zeile in die Datenbank schreiben, da die Leerzeichen sehr wichtig sind muss ich die gesamte Zeile (400 Zeichen) in eine Spalte schreiben, was bei mir folgendermaßen aussieht:


PHP-Code:
// ich schreib mal die Variablen rüber
$DatanameOld "Pfad/Zur/Datei.ASC";
$db_tab "daten2009";
$colum "data";

// Originaldatei öffnen (leserecht)
$DataOld fopen($DatanameOld,"r");
 
 
while(
$oneline=fgets($DataOld,400)) {
//var_dump($oneline);
      
$pruefen mysql_query("SELECT * FROM ".$db_tab." WHERE ".$colum."='".$oneline."'") or die("Pruefen: ".mysql_error());
      
//var_dump($pruefen);
      
      
if(!mysql_num_rows($pruefen)) {
                   
$eintrag "INSERT INTO ".$db_tab." (".$colum.") VALUES ('".$oneline."')";
                
$eintragen mysql_query($eintrag) or die("Eintrag: "mysql_error());     
      } 

Bei der kleinen funktioniert es wieder ohne Probleme, sobald ich aber mehr Datensätz habe kommt folgende Meldung:

Zitat:
Pruefen: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Womit ich nichts anfangen kann, wenn 'hier nix steht'
Aber es kommt ab der 820 Zeile vor (es ist egal was dort steht, ich denke es liegt an der Menge)

Bei der großen Datei passiert etwas was ich nicht versteh:
Lese die Daten mit dem oben genannten Script in die DB, dann erstellt er alle ID's aber in der Spalte ($colum = "data") steht nix, nur in der ersten Zelle.
Aber leider nicht richtig, es sollte folgendes drin stehen:

Zitat:
RN09999999999 usw....
Und folgendes steht drin:
Zitat:
ÿþR
(in der Zeichencodierung: ISO-8859-15 oder US ASCII)
in Unicode erscheinen nur die Fragezeichen in einer Route.

In der Datei sind keine Zeichen vor RN0999....
Woher kommen diese 2 komischen Zeichen, wobei sie mir nicht neu sind, ich hatte sie vor einem Jahr schon mal bei einer Funktion, nur ich weiß nicht mehr wie ich das Problem damals behoben habe.

Würde es etwas bringen, die Datei zu splitten?
In dem ich sage lese Zeile 0 bis 800 ein, lösche sie anschließend aus der Datei und beginne erneut, bis keine Datensätze mehr vorhanden sind???


Ich hoffe jemand kann mir einen Rat geben und mir helfen, ich weiß wirklich nicht weiter.
Schon mal vielen Dank im Voraus.

Lg
Jacke ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 08.05.2009, 08:47  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Ich vermute, es liegt nicht an der Menge, sondern daran, dass vermutlich im Text Anführungszeichen stehen. Diese müssen maskiert werden, und dazu hat PHP auch eine Funktion.
Ausserdem verstehe ich nicht, was es in so einem Fall bringen soll, Tabellen- und Attributnamen in Variablen zu schreiben.
PHP-Code:
$DatanameOld "Pfad/Zur/Datei.ASC";
$DataOld fopen($DatanameOld"r");
 
while (
$oneline fgets($DataOld,400)){
    
//var_dump($oneline);
    
$sql "
        SELECT
            COUNT(*)
        FROM
            daten2009
        WHERE 
            data = '" 
mysql_real_escape_string($oneline) . "'";
    
$pruefen mysql_query($sql) or die("Pruefen: " mysql_error());
    list(
$anzahl) = mysql_fetch_row($pruefen);
    if(
$anzahl == 0){
        
$eintrag "
            INSERT INTO
                daten2009(
                    data
                ) 
                VALUES (
                    '" 
mysql_real_escape_string($oneline) . "'
                )"
;
        
$eintragen mysql_query($eintrag) or die("Eintrag: " mysql_error());     
    } 

__________________
Gruss
L
lazydog ist offline  
Alt 08.05.2009, 09:23  
Benutzer
 
Registriert seit: 04.11.2008
Beiträge: 41
Jacke befindet sich auf einem aufstrebenden Ast
Standard

Es sind wirklich keine Zeichen vor dem Datensatz, habe es trotzdem getestet, leider ohne Änderung.
Auch trim() oder Ähnliches bringt nix, da steht wirklich nichts davor. Kopiere ich Datensätze von der Großen in meine kleine klappt es?
Da muss irgendwas schief laufen...

Ich habe die gesamte große Datei eingelesen, unter PHPmyAdmin sehe ich in der Übersicht das manche Positionen einen Eintrag erhalten:

1 - ÿþRN09999999-64295389999999

klick ich auf bearbeiten steht da nur ÿþR drin.

Und es geht ganz unregelmäßig weiter:

1 - ÿþR
18 - A
20 - A
22 - A
62 - A
138 - G
usw....
(die Datensätze dazwischen sind leer)

Und die Spalte ist als Text formatiert und fasst auch 400 Zeichen (sonst klappte es ja immer)

Geändert von Jacke (08.05.2009 um 09:39 Uhr).
Jacke ist offline  
Alt 08.05.2009, 09:36  
Erfahrener Benutzer
 
Benutzerbild von lazydog
 
Registriert seit: 02.04.2008
Beiträge: 4.032
lazydog befindet sich auf einem aufstrebenden Ast
Standard

Hast du nun einen SQL-Fehler oder nicht. Mein Beitrag bezug sich im Moment nur auf diesen.
__________________
Gruss
L
lazydog ist offline  
Alt 08.05.2009, 09:40  
Benutzer
 
Registriert seit: 04.11.2008
Beiträge: 41
Jacke befindet sich auf einem aufstrebenden Ast
Standard

Licht am Ende des Tunnels
@lazydog, ne mit SQL ist eigentlich alles schick!

Ich arbeite nur mit ASC-Datein, aber jemand hatte die relevanten Daten mal in Excel importiert (nur eine Spalte), da wollte ich die alten Daten immer mit speichern als herausbekommen (und da muss dieser, wenn auch nicht sichtbare Fehler entstanden sein)
Also habe alles markiert und kopiert (die Zwischenablage hat ganz schön gekämpft )
So nun habe ich alle Datensätze wenigstens in einer Ordentlichen ASC-Datei.
JUHU
Aber zu früh gefreut, meine Daten werden perfekt in die DB eingelesen, aber leider stoppt er nach 14.000 Datensätzen? Ist irgendwo ein Maximum deklariert, welches ich hochsetzten muss?
So ich habe die Daten einmal neu aus einer Excel-Datei kopiert
Jacke ist offline  
Alt 08.05.2009, 09:51  
yab
Erfahrener Benutzer
 
Registriert seit: 05.04.2009
Beiträge: 291
PHP-Kenntnisse:
Anfänger
yab befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Jacke Beitrag anzeigen
Aber zu früh gefreut, meine Daten werden perfekt in die DB eingelesen, aber leider stoppt er nach 14.000 Datensätzen? Ist irgendwo ein Maximum deklariert, welches ich hochsetzten muss?
Vermutlich: PHP: Laufzeit-Konfiguration - Manual
yab ist offline  
Alt 08.05.2009, 09:57  
Benutzer
 
Registriert seit: 04.11.2008
Beiträge: 41
Jacke befindet sich auf einem aufstrebenden Ast
Standard

Ganz genau:
ini_set("max_execution_time", "600"); // 10 Minuten

ergab schon mal 47,391 Datensätze, ich stell das auf 20 dann sollten meine 70.000 Daten endlich drin sein. Wahnsinn, hätte nie gedacht das es so lange dauern kann.
Jacke ist offline  
Alt 08.05.2009, 10:02  
yab
Erfahrener Benutzer
 
Registriert seit: 05.04.2009
Beiträge: 291
PHP-Kenntnisse:
Anfänger
yab befindet sich auf einem aufstrebenden Ast
Standard

ini_set('max_execution_time', 0); // unendlich
yab ist offline  
Alt 08.05.2009, 10:19  
Benutzer
 
Registriert seit: 04.11.2008
Beiträge: 41
Jacke befindet sich auf einem aufstrebenden Ast
Standard

Na das sollte reichen, danke für den Parameter
Jacke ist offline  
Alt 08.05.2009, 10:20  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard

Zitat:
Zitat von yab Beitrag anzeigen
ini_set('max_execution_time', 0); // unendlich
Das kann man so pauschal aber nicht unbedingt überall machen, da kann es unter Umständen zu Problemen mit dem Provider kommen, viele sehen das nicht gern und lassen diese Einstellung so nicht zu, da sollte er sich mal mit seinem Provider in Verbindung setzen.
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] css datei in css datei einbinden xstefxanx HTML, Usability und Barrierefreiheit 10 21.03.2009 20:11
[Erledigt] Datei Upload Prüfung auf wav / mp3 mastertnt PHP Tipps 2009 4 15.02.2009 20:05
Wert in externer Datei speichern Abakay PHP Tipps 2008 6 04.12.2008 18:56
Datei per Buttonklick runterladen... go1denboy PHP Tipps 2008 7 14.06.2008 20:25
Großer Baum -> Große Datei -> Hohe Ladezeit :( PsychoEagle PHP Tipps 2008 7 22.09.2007 12:44
.gz Datei entpacken und mit dem Inhalt weiterarbeiten R4v3r PHP Tipps 2007 8 02.02.2007 14:49
Bearbeitung großer Datenmengen aufteilen Der_Gerhard PHP Tipps 2006 19 12.10.2006 22:07
String als Datei speichern Zangelo PHP Tipps 2006 23 25.08.2006 14:13
Datei auf FTP-Server ändern ohne lokal abzuspeichern faux PHP-Fortgeschrittene 11 02.09.2005 11:54
Datei mehrmals öffnen und schließen in einem Skript PHP Tipps 2005-2 14 14.07.2005 18:12
Ordner Struktur auslesen bestimmte datei finden .... silverghost PHP Tipps 2005 3 24.05.2005 13:55
Includete Datei nicht gleich ausgeben Madden PHP-Fortgeschrittene 1 12.05.2005 00:19
xfdf Datei mit PHP an eMail senden Problem: Leere Datei PHP Tipps 2004-2 1 07.12.2004 12:25
[Erledigt] datei editieren PHP Tipps 2004 1 10.09.2004 20:33
(ich schonwieder) Link seite automatisch imported_DJ Nuno PHP Tipps 2004 14 19.08.2004 17:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql bäume yab

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum