php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 4,00 durchschnittlich.
  #1 (permalink)  
Alt 03-01-2007, 20:35
Peter_Panther
 Registrierter Benutzer
Links : Onlinestatus : Peter_Panther ist offline
Registriert seit: Jul 2004
Beiträge: 126
Peter_Panther ist zur Zeit noch ein unbeschriebenes Blatt
Standard Datei öffnen, StringS suchen, ersetzen, schreiben

Hallo Gemeinde,

habe ein Problem welches mir irgendwie keine Ruhe mehr laesst.
Ich moechte in einer Datei (txt) nach unterschiedlichen (bestimmten) Woertern suchen, wie z.B.
peter="5", peter="6", peter="7" . Diese Woerter moechte ich durch peter="10", peter="11", peter="12" ersetzen.

Meine Gedanken dazu:

PHP-Code:
$fp fopen("test.htm"'r');
while(!
feof($fp))
{
$inhalt fgets($fp8);
if (
$inhalt "peter")
{
echo 
fread($fp4);
}
else
{
fseek($fp, -7SEEK_CUR);
}
}
fclose($fp); 
Hier fehlt natuerlich noch das str_replace oder aehnliche Funktionen.
Im Prinzip dachte ich mir ich gehe einfach Zeichen fuer Zeichen durch.
So wie im Skript beschrieben,
hole die ersten 8 Zeichen, sieh nach ob "peter" enthalten ist.
Wenn ja, dann gib die naechsten 4 Zeichen aus.
Falls nicht, dann gehe -7 zurueck.

Ich muesste aber einer Stelle sicherlich einen break machen und die peter´s
ersetzen?!

preg_replace oder str_replace auf die gesamte datei funktioniert nicht, oder? Weil diese unterschiedliche sind, also die suchwoerter.

Danke fuer eure Hilfe.
Boardsuche benutzt, Google benutzt - ja ;-)
Mit Zitat antworten
  #2 (permalink)  
Alt 03-01-2007, 20:53
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

wie gross ist die datei?
b.z.w wie gross kann sie werden?

auch die PHP version ist wichtig
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #3 (permalink)  
Alt 03-01-2007, 20:56
Peter_Panther
 Registrierter Benutzer
Links : Onlinestatus : Peter_Panther ist offline
Registriert seit: Jul 2004
Beiträge: 126
Peter_Panther ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo,

die Dateien werden dynamisch erstellt. Es laesst sich also immer schwer abschaetzen wie gross diese wirklich sind/werden.

Wieso fragst du ? Es ist moeglich die gesamte Datei in einen String zu packen, mit file_get_contents funktioniert das.

Nur leider bekomm ich damit mein Problem auch nicht in den Griff.
Vielen Dank für die schnelle Antwort!
Mit Zitat antworten
  #4 (permalink)  
Alt 03-01-2007, 21:08
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Peter_Panther
Nur leider bekomm ich damit mein Problem auch nicht in den Griff.
preg_replace() mit modifikator e oder preg_replace_callback() kannst du dazu benutzen.

war das oben nur ein bsp., oder möchtest du wirklich nur alle 'peter="zahl"' durch peter="zahl+5"' ersetzen?
Mit Zitat antworten
  #5 (permalink)  
Alt 03-01-2007, 21:09
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

wenn die datei übersichtlich gross ist, kannst du problemlos der inhalt mit preg_replace zu behandeln und die datei wieder speichern.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #6 (permalink)  
Alt 03-01-2007, 21:29
Peter_Panther
 Registrierter Benutzer
Links : Onlinestatus : Peter_Panther ist offline
Registriert seit: Jul 2004
Beiträge: 126
Peter_Panther ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von 3DMax

war das oben nur ein bsp., oder möchtest du wirklich nur alle 'peter="zahl"' durch peter="zahl+5"' ersetzen?
Ich werde es mal probieren. Es spielt eigentlich keine Rolle, im Prinzip koennte man auch diese zahl + 5 rechnen. Theoretisch wuerde das gehen.

Hintergrund:
Eine html-Datei in der verschiedene Links mit tabindex="zahl" angegeben. Damit 1. keine Doppelungen auftreten und 2. ich keinen Uberblick mehr habe, moechte ich alle bestehenden jetzt ordentlich durchnummerieren.

Hilft diese Info weiter?! ;-)

Slava:
Bist du dir sicher? Also entweder ich habe dabei etwas falsch gemacht oder du stellst es dir vielleicht aehnlich einfach vor wie ich am Anfang? Sorry, soll keine Unterstellung sein.

Geändert von Peter_Panther (03-01-2007 um 21:33 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 03-01-2007, 21:31
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Original geschrieben von Peter_Panther
Wieso fragst du ?
aus neugier?
wenn die dateien 100mb gross sein können, dann muss man ganz anderen weg gehen als bei der dateien die 30 kb gross sind.
ausserdem wenn du
peter="7",peter="5",peter="2"
durch peter="10" einfach so in der datei direkt überschreibst, dann bekommst du
peter="10"peter="10"eter="2"
also bei einem zeichen mehr muss du der rest von der ganzer datei irgendwo zwischenspeichern
b.z.w muss du alles in eine andere datei speichern,
alte datei löschen,
die neue datei bekommt name von alter datei.
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #8 (permalink)  
Alt 03-01-2007, 21:37
Peter_Panther
 Registrierter Benutzer
Links : Onlinestatus : Peter_Panther ist offline
Registriert seit: Jul 2004
Beiträge: 126
Peter_Panther ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Slava

peter="7",peter="5",peter="2"
durch peter="10" einfach so in der datei direkt überschreibst
Genau das will ich nicht.
peter="zahl1", peter="zahl2", peter="zahl3"

soll ersetzt werden durch

peter="wasanderes1", peter="wasanderes2" ...

Es gibt da eine Funktion mit der man auch Arrays benutzen kann.
Da habe ich versucht mit 2 for-Schleifen diese Stellen zu ersetzen.
Mit Zitat antworten
  #9 (permalink)  
Alt 03-01-2007, 21:50
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so, ich versuch's nochmal.

Zitat:
Original geschrieben von Peter_Panther Hintergrund:
Eine html-Datei in der verschiedene Links mit tabindex="zahl" angegeben. Damit 1. keine Doppelungen auftreten und 2. ich keinen Uberblick mehr habe, moechte ich alle bestehenden jetzt ordentlich durchnummerieren.
also möchtest du alle gefundenen tabindex="irgendwas" durchnummerieren bzw. ersetzen von 1 bis anzahl fundstellen.

erstes tabindex="irgendetwas" -> tabindex="1"
zweites tabindex="irgendetwas" -> tabindex="2"
... usw.

richtig verstanden?
Mit Zitat antworten
  #10 (permalink)  
Alt 03-01-2007, 21:53
Peter_Panther
 Registrierter Benutzer
Links : Onlinestatus : Peter_Panther ist offline
Registriert seit: Jul 2004
Beiträge: 126
Peter_Panther ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, genau!

Der Content der Seite wird von vielen Leuten erstellt. Es kann also vorkommen, dass im Header ein tabindex="10" und weiter untern (im Content eben) ploetzlich ein tabindex="2" steht. Will heissen,
die sind vorher (in der Rohdatei quasi) keinesfalls irgendwie geordnet nummeriert.
Mit Zitat antworten
  #11 (permalink)  
Alt 03-01-2007, 23:17
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

der code sollte das machen, was du erreichen möchtest, wobei aber meiner meinung nach die tabindex nicht unbedingt geordnet sein müssen.
PHP-Code:
$content=file_get_contents('file.html');

$content=preg_replace('/tabindex="\\d+"/''tabindex="#"'$content);

if(
preg_match_all('/tabindex="#"/'$content$matches))
 for(
$i=0$i<count($matches[0]); $i++)
  
$content=preg_replace('/tabindex="#"/''tabindex="'.$i.'"'$content1); 
Mit Zitat antworten
  #12 (permalink)  
Alt 04-01-2007, 08:18
Peter_Panther
 Registrierter Benutzer
Links : Onlinestatus : Peter_Panther ist offline
Registriert seit: Jul 2004
Beiträge: 126
Peter_Panther ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke fuer deine Hilfe!

Habe jetzt eine andere Moeglichkeit gefunden. Ueber preg_replace_callback funktioniert es auch super.

PHP-Code:
$content file_get_contents('datei.htm');
    
$count 0;
    function 
ersetzen($treffer)
    {
        global 
$count;
        
$count++;
        return 
$treffer[1].$count.$treffer[2];
    }
    echo 
preg_replace_callback('/(tabindex=").*?(")/'"ersetzen"$content
Ist vielleicht etwas besser als vorher alle zahlen durch # zu ersetzen. Zumal der Code auch etwas flexibler durch das tabindex=".*? ist.
Man weiss ja nie was die Pappenheimer in den tabindex reinklimpern ;-)
Mit Zitat antworten
  #13 (permalink)  
Alt 04-01-2007, 13:52
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Peter_Panther
Ist vielleicht etwas besser als vorher alle zahlen durch # zu ersetzen.
ja, hast recht, ich habs viel zu umständlich gelöst
aber warum einfach, wenns auch kompliziert geht
Mit Zitat antworten
  #14 (permalink)  
Alt 04-01-2007, 14:27
Peter_Panther
 Registrierter Benutzer
Links : Onlinestatus : Peter_Panther ist offline
Registriert seit: Jul 2004
Beiträge: 126
Peter_Panther ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Okay, dann bin ich erstmal beruhigt

Im Prinzip ist mir das global $count noch ein Dorn im Auge.
Sowas soll man ja im Prinzip nicht machen, war mir aber auch eigentlich egal. Wahrscheinlich wie bei dir, es funktioniert ja ;-)

Also, vielen Dank nochmal!
Mit Zitat antworten
  #15 (permalink)  
Alt 04-01-2007, 15:13
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

mit dem modifier e gehts auch:

$i=1;
$c=preg_replace('/tabindex="\d+"/e', "'tabindex=\"'.\$i++.'\"'", $c);
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:17 Uhr.