php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.08.2004, 16:08  
me
Benutzer
 
Registriert seit: 24.08.2004
Beiträge: 86
me
me eine Nachricht über ICQ schicken
Standard Textdatei auslesen

Hi,
ich möchte eine Textdatei auslesen und in eine Datenbank übertragen.
Das Übertragen in die Datenbank ist gar kein problem.
Aber die Datei hat ungefähr 1Million ( ) Datensätze im format:

Nr........................Name.................... ...Sonstwas
9829898..............Teeeeesst................kjkj dljdskjkjflsj
874487................nochn test................dfgdfgdfggfd

(Die Punkte sind natürlich leerzeichen :wink: )

Die einzelnen Felder nummer Name sonstwas sollen in variablen geschrieben werden um sie dann in die Datenbank zu speichern.

Dabei will ich mit ne Schleife einen Zähler hochzählen und immer die ikste Zeile anspringen(1. Durchlauf = 1. Zeile, 2. Durchlauf = 2. Zeile. ...)
um die ganze zeile einzulesen und dann im script die substrings aus dem langen string herausschneiden, und zwischendurch immer in die Datenbank zu tun.

Jetzt die Frage:
wie kann ich die Zeile Anspringen bei der der zähler gerade ist?

thx
__________________
enotiz der ultimative Online-Notizzettel
me ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.08.2004, 16:17  
Gast
 
Beiträge: n/a
Standard

PHP-Code:
// liest gesamte datei ein
// Jede Zeile der Datei ist einzelnd in dem array $lines erreichbar
$lines file('deinfile.txt');

foreach(
$lines as $value) {
    
// Das was du mit jeder Zeile machen möchtest

Bei wirklich 1 Million Datensätze wirst du evtl ein paar Probleme bekommen.
Ich hab das grad mal hochgerechnet bei 30bits pro zeile.
Die Zahl mag ich garnicht posten hier
 
Alt 25.08.2004, 16:20  
Gast
 
Beiträge: n/a
Standard

ob nun 1 million oder weniger, spielt ja keine rolle .. nur wozu einlesen?
du kannst doch direkt ne csv datei in mysql importieren? aber das würde
ich halt mit nem normalen editor machen .. leerzeichen durch ein trenn-
zeichen ersetzen und dann hoch jubeln. das is ne einmalige sache und
ich finde den aufwand etwas übertrieben

wenn du das dennoch öfters machen möchtest, würd ich trotzdem nicht
anfangen die datei einzulesen. also nicht so extrem. einlesen wirste müssen.
dann mit nem regulären ausdruck leerzeichen ersetzen und dann speichern
und in die datenbank jagen.
 
Alt 25.08.2004, 16:26  
me
Benutzer
 
Registriert seit: 24.08.2004
Beiträge: 86
me
me eine Nachricht über ICQ schicken
Standard

thx an shoryuken (wird mir sicher helfen)
und an stef:
ich will ja nicht alle daten einlesen
so ein datensatz hat so 10 attribute von denen ich nur 7 einlesen will...
und in den attribunten kann ja auch ein leerzeichen auftauchen oder? :wink:
__________________
enotiz der ultimative Online-Notizzettel
me ist offline  
Alt 25.08.2004, 16:41  
Gast
 
Beiträge: n/a
Standard

naja das sind ja so sachen, die standen nirgends geschrieben. 7 / 10, gut
dann is klar, dann wirste einlesen müssen.

nuja und mit den leerzeichen, dann ersetzte halt alles wo mehr als ein leerzeichen
am stück vorkommt is jetzt auch nich der unterschied

aber wie gesagt, file operationen wirste da gut gebrauchen können.

file() für zeilenweises einlesen, oder file_get_contents() und dann anhand von
\n bzw \r in nen array splitten. läuft letzt endlich aufs gleiche raus, weil zeilen-
weise arbeiten kannste halt nur mit nem array
 
Alt 25.08.2004, 22:53  
Erfahrener Benutzer
 
Registriert seit: 30.06.2004
Beiträge: 619
tapferesschneiderlein
Standard

Das Problem an file() oder file_get_contents() ist, daß bei 1 Mio. Zeilen der RAM vielleicht nicht ausreichen wird.

Es gibt aber dennoch einen ressourcenfreundlicheren Weg: Lies immer nur eine Zeile ein, [wenn sie zu den zu bearbeiteten gehört,] exrahiere die Felder, schreib sie in die DB und wirf sie weg.
PHP-Code:
<?php

// falls ich Dich richtig verstanden habe, 
// daß Du nur bestimmte Zeilen brauchst (A):
$lines_to_read = array(1,2,40,41,999999);


/* zur DB connecten */

$datei 'datei';
$pcre  '#(\d+)\s{2,}?(.+)\s{2,}#U';

$fp fopen($datei'r');

$line 0;
while (!
feof($fp))
    {
    
$line_content fgets($fp4096);
    
    
// wieder falls A:
    
if (in_array($line++, $lines_to_read))
        {
        
// Felder extrahieren
        // z. B. mit 
        
preg_match($pcre$line_content$matches);
        
        
$query 'INSERT INTO tabelle
                  (Feld1, Feld2, ...)
                  VALUES
                  ('
;

        unset(
$matches[0]);
        foreach (
$matches AS $value)
            
$query .= '"' addslashes($value) . '",';

        
$query substr($query0, -1) . ')';
        
mysql_query($query);
        }
    }

fclose($fp);

?>
tapferesschneiderlein ist offline  
Alt 26.08.2004, 08:50  
me
Benutzer
 
Registriert seit: 24.08.2004
Beiträge: 86
me
me eine Nachricht über ICQ schicken
Standard

ok, tschuldigung, sind nur 16000 Datensätze...
hab vieleicht n bischen übertrieben.
aber zu tapferesschneiderlein:
wofür ist die variable
$pcre = '#(\d+)\s{2,}?(.+)\s{2,}#U';
und was macht der befehl
preg_match();
wo sie gebraucht wird
eigentlich?
__________________
enotiz der ultimative Online-Notizzettel
me ist offline  
Alt 26.08.2004, 08:51  
Gast
 
Beiträge: n/a
Standard

www.php.net/preg_match extrahiert aus nem string anhand vorgegebener
regulärer ausdrücke (http://www.regular-expressions.info/) strings/zahlen/..
 
Alt 26.08.2004, 09:09  
me
Benutzer
 
Registriert seit: 24.08.2004
Beiträge: 86
me
me eine Nachricht über ICQ schicken
Standard

Ich war in Englisch ne niete...

aber mal ganz anders.
hier ein teil des Codes

<?
//$value müsste dann die temporäre Zeile sein. nur wie speicher ich die in $value?
//dann das herausschneiden der substrings
$artnr = substr($value, 0, 6);
$titel = substr($value, 26, 40);
$kurztext = $titel." ve: ".substr($value, 192, 7);
$rubrik = substr($value, 73, 2);
$preis = substr($value, 78, 6);
$preis = $preis / 100;
//und ab in die Datenbank
$sql="INSERT INTO artikel VALUES ('', '', '$artnr', '$titel', '', '', '$kurztext', '', '$rubrik', '', '', '$preis', '');";
?>

wer ergänzt mir diesen Code???

ich bin nähmlich vollkommen unfähig. :wink:
__________________
enotiz der ultimative Online-Notizzettel
me ist offline  
Alt 26.08.2004, 09:13  
Gast
 
Beiträge: n/a
Standard

google kann auch deutsch.

zum thema code ergänzen: wie und vor allem um was sollen wir denn deinen
code ergänzen? wir kennen nich mal den aufbau deiner datei.

~ edit ~

sorry, hab ich falsch verstanden. ich hab gedacht wir sollen dir das auslesen
an sich erweitern.

www.php.net/fopen zum schmökern und ideen sammeln. ansonsten sollte
das doch nicht wirklich das problem darstellen deinen code da einzupflanzen?

und wenn doch - dann würd ich sagen, probieren, probieren, probieren. wenn
was nicht klappt - mit code & fehlermeldung hier melden. und wir versuchen
zu helfen.
 
 


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
kann textdatei nicht auslesen Eardy PHP Tipps 2008 1 28.02.2008 16:23
bestimmte Textblöcke aus einer Textdatei auslesen Canni PHP Tipps 2007 7 10.08.2007 17:12
[Erledigt] gelöst: Tabelle auslesen -&amp;amp;amp;amp;gt; Gleiche Einträge nur 1 Mal Datenbanken 3 31.03.2006 01:44
Textdatei auslesen, aber ohne Komentare HSFighter PHP Tipps 2006 31 23.02.2006 10:07
Abbruch beim Auslesen einer Textdatei workaholic PHP Tipps 2005-2 4 24.10.2005 18:55
Textdatei auslesen und auf mehrere Seiten verteilen? nicobischof PHP Tipps 2005-2 4 02.10.2005 11:24
auslesen und nochmals auslesen?! $$$ ThiKool $$$ PHP Tipps 2005 23 10.03.2005 19:43
Textdatei mit unregelm. Werten in versch. Größen auslesen? PHP Tipps 2005 6 14.01.2005 09:38
Textdatei auslesen, Inhalt in HTML|PHP ausgeben. PHP Tipps 2004-2 25 22.12.2004 01:34
Werte in Textdatei speichern und auslesen PHP Tipps 2004-2 12 21.12.2004 09:22
Textdatei hochladen und per PHP auslesen PHP Tipps 2004-2 2 16.12.2004 12:53
Zeilenweise eine Textdatei auslesen PHP Tipps 2004 12 29.10.2004 10:29
[Erledigt] Werte aus Textdatei auslesen PHP Tipps 2004 22 19.10.2004 15:00
Laufschrift (auslesen über Textdatei) PHP Tipps 2004 6 22.08.2004 19:58
Textdatei auslesen und Dateien downloaden PHP Tipps 2004 1 15.08.2004 13:05

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
1 million zeilen auslesen

Alle Zeitangaben in WEZ +2. Es ist jetzt 02:37 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.