Archiv verlassen und diese Seite im Standarddesign anzeigen : Datei auslesen und ändern.
juergen
02.04.2005, 14:04:24
Hallo Forum,
ich habe eine Text Datei mit über 15000 Einträgen die immer gleich sind.
Z.B.
(1,text,20.05.2005),
(1,anderer text,21.05.2005),
(1,noch anderer text,22.05.2005),
usw.
Nun möchte ich die Zahl 1 die ja in jeder Zeile gleich ist fortlaufend um 1 erhöhen.
Z.B.
(1,text,20.05.2005),
(2,anderer text,21.05.2005),
(3,noch anderer text,22.05.2005),
usw.
Kann mir einer sagen wie ich das mit PHP erreichen kann?
Ansonsten muß ich das von Hand machen;-((
Gruß Jürgen
wolles
02.04.2005, 15:56:21
Hallo,
schau Dir mal den Befehl file() unter Dateisystemsfunktionen an.
(Sorry, krieg das mit der verlinkten Funktion nicht hin, springt bei mir dann auf http://be.php.net und sucht da vergeblich)
Damit kannst Du die Datei in einen Array lesen.
Dann lässt Du den Array einfach durch eine Schleife laufen und ersetzt das 1 durch einen mitlaufenden Zähler.
Das würde in etwas so aussehen:
$datei = "deineDatei.txt";
$array = file($datei);
$i=0;
foreach ($array as $zeile) {
$neuezeile[$i]=$i.substr($zeile,1);
$i++;
}
Den Array $neuezeile schreibst Du jetzt wieder in Deine Datei, oder besser noch, falls Du die Möglichkeit hast in eine Datenbank, damit Du die Dateien zukänftig leichter manipulieren kannst.
Ich weiß nur nicht, ob so ein Array 15000 Elemente verkraftet, sonst müsstest Du das ganze irgendwie zeilenweise auslesen und ändern, aber ich glaube, das dürfte viel länger dauern.
juergen
04.04.2005, 19:46:34
Hallo Wolles,
danke für Deine Nachricht aber alles was das Script mir in die neue Datei (ok.txt)schreibt ist "array". Hier mein Code.
<?php
$config_file = "ok.txt";
$textfehler = "Ihre Änderungen konnten nicht in [$config_file] gespeichert werden!";
$textreal = "Bin fertig! Die Datei [$config_file] ist neu geschrieben!";
$datei = "17804.txt";
$array = file($datei);
$i=0;
foreach ($array as $zeile) {
$neuezeile[$i]=$i.substr($zeile,1);
$i++;
}
if (is_writable($config_file)) {
if (!$handle = fopen($config_file, "w")) {
print "<b>Kann die Datei $config_file nicht öffnen</b>";
exit;
}
if (!fwrite($handle, $neuezeile)) {
print "<b>Kann in die Datei $config_file nicht schreiben</b>";
exit;
}
fclose($handle);
print "<b>$textreal</b>";
} else {
print "<b>$textfehler</b>";
}
?>
Danke für die Hilfe.
Gruß Jürgen
|Coding
04.04.2005, 20:15:09
Du willst ja auch ein Array in die Datei schreiben...
Schreib das mal unter deine FOR-Schleife:
$neuezeile = join("n", $neuezeile);
juergen
06.04.2005, 19:52:15
Hallo Coding,
ich habe es jetzt so gemacht!
$array = file($datei);
$i=1; // weil ja mit 1 beginnen soll
foreach ($array as $zeile) {
$neuezeile[$i]=$i.substr($zeile, 2); //muß hier etwas geändert werden?
$i++;
}
// bei join habe ich den Zeilenumbruch entfernt damit keine leerzeilen vorkommen
$neuezeile = join("", $neuezeile);
Aber ich bekomme folgende Ausgabe.
1,Text,22.05.2005,)
es soll aber: (1,Text,22.05.2005,)
Das erste Zeichen, die öffnende Klammer wird entfernt! Das darf nicht.
Danke und Gruß Jürgen
|Coding
06.04.2005, 20:22:53
$neuezeile[$i]=$i.substr($zeile, 2); //muß hier etwas geändert werden? ja, genau hier
so:
$neuezeile[$i]= '(' . $i.substr($zeile, 2);
wolles
06.04.2005, 21:23:47
Sorry, hatte nicht gesehen, daß die Klammer mit zu Deinem Ausdruck gehört.
Aber Du hattest ja selber herausgefunden, daß Du als Parameter in substr() eine 2 setzen musstest.
substr($xxx,2) liefert Dir den String ab dem 3.Zeichen im String, den Rest davor ersetzt Du ja durch die fortlaufende Zahl. Deswegen musst Du die erste Klammer quasi manuell hinzufügen, wie Coding es gepostet hat.
xabbuh
07.04.2005, 10:00:40
Ist es denn erwünscht, dass an den Anfang jedes Arrayelementes eine Klammer gesetzt wird? Soll die Klammer nicht nur einmal ganz an den Anfang gesetzt werden:
<?php
$neuezeile = '(' . join('', $neuezeile);
?>
juergen
07.04.2005, 16:50:36
Hallo Hallo,
jetzt fuztes wie geölt.
Danke für Eure Hilfe. Gruß Jürgen
juergen
07.04.2005, 16:53:45
Hallo xabbuh,
ne ne ist schon alles so richtig wie Coding es sagt. Am Anfang dieses Themas steht ja ganz eindeutig das jedes mal die Klama gebraucht wird.
Danke für die Hilfe
juergen
07.04.2005, 17:03:02
Hallo noch mal ich,
wie gestallte ich ein Script wenn ich zum Beispiel eine Datei habe in der jede Menge HTML Formatierungen stehen (z.B. <tr>, <td>, <dd>, usw.) und immer wieder ein wiederkerender Ausdruck wie z.B.
<span>a, Verschiedener Text, Datum, Uhrzeit,</span> vorkommt und ich nur diesen aus der Datei auslesen will um ihn in eine neue Datei zu schreiben.
Da muß ich doch mit --> $pattern = "=<span>(.*)</span>=i"; arbeiten oder?
Was meint Ihr!
Gruß Jürgen und noch mal Danke
|Coding
07.04.2005, 17:08:24
$pattern = "=<span>(.*)</span>=i";
Probieren geht über studieren :-)
xabbuh
07.04.2005, 17:09:28
ne ne ist schon alles so richtig wie Coding es sagt. Am Anfang dieses Themas steht ja ganz eindeutig das jedes mal die Klama gebraucht wird.
Achso, das hatte ich dann wohl überlesen.
Zu deinem aktuellen Problem: Das Ganze kannst du mit regulären Ausdrücken (http://tut.php-q.net/regex.html) und der Funktion preg_match_all() ,machen.
|Coding
07.04.2005, 17:50:50
"=<span>(.*)</span>=i"
Ist doch ein regulärer Ausdrück...
juergen
07.04.2005, 20:17:58
Hallo,
so jetzt habe ich es fast geschaft:
$datei = "anfang.txt";
$content = file_get_contents($datei);
$pattern = "=<span>(.*)</span>=i";
preg_match_all($pattern, $content, $matches);
$ausgabe = $matches[1];
$textausgabe = join("<br>", $ausgabe); //Das <br> wegen des Zeilenumbruchs
echo $textausgabe; Hier bekomme ich meine Ausgabe.
Nur noch ein Problem: Mein Suchmuster ist nicht
<span> sondern <span class="text">!
Das class="text" macht Probleme! Wenn ich es entferne gehts.
Ich bekomme diese Meldungen mit dem class="text" angezeigt:
Warning: Unknown modifier 't' in D:ApacheServerxampphtdocstest.php on line 10
Warning: join(): Bad arguments. in D:ApacheServerxampphtdocstest.php on line 12
Was macht man in solch einem Fall?
Gruß Jürgen
|Coding
07.04.2005, 20:28:25
In so einem fall nimmst Du einfach andere Delimiter... und so:
$pattern = "#<span.*>(.*)</span>#i";
juergen
08.04.2005, 14:24:09
Hallo Coding,
hat funktioniert. Gibt es eigentlich eine Liste aller Delimiter?
So jetzt habe ich also alle Vorkommnisse untereinander stehen, da ich ja <br> im join eingetragen habe. Das ist nicht so gut, da ich nun wieder eine Formatierung habe, die ich nicht gebrauchen kann. Ich möchte alle Vorkommnisse zwar untereinander stehen haben, aber nicht mit einem <br>. Ich muß also das Script dazu bringen, jedes Vorkommnis in eine Zeile zu schreiben.
Weiter muß jedem Vorkommnis noch (1, ' vorangestellt und ', '2005-02-13'), hinten angefügt werden.
Das habe ich nun so gemacht:
$i=1;
foreach ($ausgabe as $zeile) {
$neuezeile[$i]= "($i, '" .substr($zeile, 0);
$i++;
}
$mail = join("', '2005-02-13'),", $neuezeile);
So jetzt muß ich nur noch jedes Vorkommnis untereinander ohne <br> in eine neue leere Datei schreiben. Kannst Du mir da einen Tipp geben, wie ich das am dümmsten hin bekomme?
Danke und Gruß Jürgen
|Coding
08.04.2005, 14:27:32
Gibt es eigentlich eine Liste aller Delimiter?
Die kannst Du frei wählen, Du solltest aber immer einen wählen der im Suchmuster nicht vorkommt, dann musst Du den nicht schützen.
So jetzt muß ich nur noch jedes Vorkommnis untereinander ohne <br> in eine neue leere Datei schreiben. Kannst Du mir da einen Tipp geben, wie ich das am dümmsten hin bekomme?
//...
$mail = join("', '2005-02-13'),", $neuezeile);
$mail = str_replace('<br>', '', $mail);
juergen
08.04.2005, 17:58:13
Hallo,
danke für Deine Tipps. In der Zwischenzeit habe ich es so gemacht.
$mail = join("', '2005-02-13'),n", $neuezeile);
Geht auch!
Jetzt kommt das nächste Problem!
Die Datei ist nun 81458 KB groß und ich will die Daten in einer mysql-Datenbank speichern.----- Das geht nicht mit importieren da phpmyadmin abbricht! Mit einer 1 MB großen Datei funktioniert es gerade noch.
Jetzt denke ich das ich die Daten nicht in eine Datei schreiben werde sondern gleich in die Datenbank! Geht das so einfach. Und da ich das noch nie gemacht habe wird das wohl eine gute Übung für mich sein. Kannst Du mir da die Richtung weisen und mit was ich anfangen soll?
Danke für alles und viele Grüße
Jürgen
|Coding
08.04.2005, 18:17:57
Dein Problem ist der Timeout, da musst Du einige Sachen beachten um dennoch deine Daten in die DB zubekommen. Schau dir mal "MySQL Dumper" an, damit müsstest Du es schaffen: mysqldumper.de (http://www.mysqldumper.de)
juergen
09.04.2005, 10:38:59
Hallo Coding,
vielen Dank für Deinen super Tipp. Mit "MySQL Dumper" habe ich es schnell und sehr einfach geschaft. Woher kennst Du das alles?
Ich würde gern einen online Editor wie dieser hier im Forum bei mir einbauen. Läuft der mit Javascript oder PHP?
PS.
Kannst Du mir Lehrbücher über PHP empfehlen? Etwas was ich auch im Garten auf dem Liegestuhl lesen kann. Ich bin Dir sehr Dankbar für Deine Hilfe.
Schönes Wochenende, Gruß Jürgen
|Coding
09.04.2005, 11:24:38
Woher kennst Du das alles?
Das bekommt man so mit :)
Ich würde gern einen online Editor wie dieser hier im Forum bei mir einbauen. Läuft der mit Javascript oder PHP?
Mit sehr viel JavaScript...
Kannst Du mir Lehrbücher über PHP empfehlen?
Das Buch "PHP 5 - Praxisbuch & Referenz" kann ich empfehlen: http://www.amazon.de/exec/obidos/ASIN/3772365590/302-7719510-8821615
Ebenfalls schönes Wochenende! :)
amerix
09.04.2005, 14:17:09
Bezüglich der Editoren schau mal auf
http://www.htmlarea.com/
juergen
09.04.2005, 17:46:42
Hallo Leute,
danke für die Info. Die haben ja die dolsten Sachen. Ich bin auch fündig geworden. Einen kleinen aber feinen Editor und das noch open Sorce.
Danke bis bald mal. Gruß Jürgen
amerix
09.04.2005, 18:34:35
Welchen denn, wenn man fragen darf? :)
juergen
10.04.2005, 14:53:19
Hallo amerix,
etwa 20 habe ich mir mal gesaugt. Wenn ich alle mal gesichtet habe gebe ich mal bescheid.
Mal eine Frage an alle:
Was genau ist ein Cron Job ??
Danke und ein schönen Sonntag! Gruß Jürgen
|Coding
10.04.2005, 15:01:04
Mit einem CronJob kannst Du zeitgesteuert ein Script o.ä. starten. Du könntest damit z.B. alle 24 h ein Datenbank Update durchführen.
Kostenlose CronJob's kriegst Du auch bei uns: http://www.selfphp.de/cronjobs/index.php
vBulletin® v3.8.3, Copyright ©2000-2013, Jelsoft Enterprises Ltd.