php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Jobs und Projekte > Projekthilfe
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


Projekthilfe Hier könnt Ihr eine Art Projekthilfe anfordern. Unter Projekthilfe verstehen wir Angebote bei denen KEIN Geld gezahlt werden kann.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  #31 (permalink)  
Alt 01-07-2008, 15:40
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

In meiner Schleife mache ich überhaupt nichts mit Dateien.
Vor der Schleife hole ich die gesamte Eingabedatei mit file() in ein Array.
Über dieses Array iteriert meine Schleife, ändert jeweils eine Zeile und schreibt die Änderung zurück in das Array.
Nach der Schleife schreibe ich das gesamte Array in einem Rutsch mit file_put_contents() in eine Datei.

Hier nochmal der Code mit Kommentaren:
PHP-Code:
// Eingabedatei in Array laden
$text file('Datei A');

// Ersetzungstabelle $tabelle = array(...) laden, s.o.
include('Datei mit Tabellendefinition');

// für jede Zeile der Eingabedatei die Schleife durchlaufen
foreach ($text as $nr => $zeile) {
    
// Zeile am Trennzeichen zerlegen, in Hilfsarray speichern
    
$teile explode('#'$zeile);
    
// zwei Ersetzungen vornehmen, in Hilfsvariablen speichern
    
$ersetzt01 str_replace($tabelle[0], $tabelle[1], $teile[0]);
    
$ersetzt02 str_replace($tabelle[0], $tabelle[2|, $teile[0]);
    
// neue Zeile zusammensetzen, an Position der alten im Array speichern
    
$text[$nr] = $zeile $ersetzt01 '.php">' $ersetzt02 '</a>';
}

// gesamtes Array in eine Datei schreiben
file_put_contents('Datei B'$text); 
Mit Zitat antworten
  #32 (permalink)  
Alt 01-07-2008, 18:21
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo onemorenerd.

Aha, mein Fehler bei der Anwendung des file_put_contens war gewesen, das ich den Zusammenbau nicht in einer Hilfsvariablen vollzogen habe, sondern im Befehl selber, was offensichtlich nicht möglich ist. Danke für die Aufklärung.

Jetzt stellt sich mir die Frage nach dem Unterschied von
foreach ($ArbZ as $nr => $zeile) und
foreach ($ArbZ as $zeile), also wann wende ich welche Version an?
Ich habe versucht, das für mich zu definieren, aber ich kann das noch nicht fassen.
Weil doch sowieso jede Zeile durchlaufen und bearbeitet wird, warum ist es da für mich von Wert, die einzelne Zeilennummer ansprechen zu können, obwohl genau dieses Verfahren zur Lösung des Teilproblems führte.
Also, wann ist es sinnvoll, mit ($ArbZ as $zeile) zu arbeiten und wann mit ($ArbZ as $nr => $zeile). Kannst Du den Unterschied mit ein paar Worten einleuchtend darstellen?
Liegt es daran, das ohne ($ArbZ as $nr => $zeile) die Zeile keinen "Namen" hat und darum solche Operationen:
$TeilZeilRepl[$nr] = str_replace($chars['browser'], $chars['replace'], $TeilZeil[0]);
nicht möglich sind?

Der Code der Schleife jetzt:

PHP-Code:
foreach ($ArbZ as $nr => $zeile) { 
                                
$TeilZeil explode("#"$zeile);
                                
$TeilZeil[0] = str_replace(' ','',$TeilZeil[0]);
                                
$TeilZeilRepl[$nr] = str_replace($chars['browser'], $chars['replace'], $TeilZeil[0]);
                                
$TeilZeilRepl[$nr] = ($TeilZeilRepl[$nr]."\n");
                                echo 
$TeilZeilRepl[$nr].'<br  />';
                                
$TeilZeilSour str_replace($chars['browser'], $chars['source'], $TeilZeil[0]);
                                
$ZeilZusam[$nr] = $TeilZeil[0].'#'.$TeilZeil[1].$TeilZeilRepl[$nr].'.php">'.$TeilZeilSour.'</a>'."\n";
                                echo 
$ZeilZusam[$nr].'<br  />';
                          }
file_put_contents ($DatNam $TeilZeilRepl);
file_put_contents ($VorbNeu $ZeilZusam);

echo 
'Fertig'
Jetzt habe ich ja darauf verzichtet, die $TeilZeil[1] von Leerzeichen zu befreien, um das a href zu erhalten, weil ja nicht das gewünschte Ergebnis eintrat, nähmlich ein zusammenhängender Link in $VorbNeu und habe jetzt festgestellt, das die zusammengebaute Zeile mit dem Link jetzt in vier Zeilen in der Datei vorliegt und mir kein Prüfverfahren einfällt, um herauszufinden, wie ich es ändern kann.
Wie gehe ich richtig vor, um festzustellen, was zu ändern ist, damit die zusammengebaute Zeile auch zusammenhängend, also in einer Zeile, abgespeichert wird?
Ich habe doch den Verbindungsoperator . eingesetzt, den einzigen, den ich kenne.

Danke für die Kommentare.

Gruß
Estrela
Mit Zitat antworten
  #33 (permalink)  
Alt 01-07-2008, 18:58
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
Also, wann ist es sinnvoll, mit ($ArbZ as $zeile) zu arbeiten und wann mit ($ArbZ as $nr => $zeile). Kannst Du den Unterschied mit ein paar Worten einleuchtend darstellen?
Liegt es daran, das ohne ($ArbZ as $nr => $zeile) die Zeile keinen "Namen" hat und darum solche Operationen:
$TeilZeilRepl[$nr] = str_replace($chars['browser'], $chars['replace'], $TeilZeil[0]);
nicht möglich sind?
Genau.

Die zwei Varianten foreach($array as $element) und foreach($array as $key => $element) iterieren beide über jedes Arrayelement.

Der einzige Unterschied besteht darin, dass bei der ersten Variante $key nicht existiert. Diese Variable braucht man, wenn man $array an der aktuellen Position verändern möchte - $array[$key] = 'foo'. ($element = 'foo' bringt natürlich nichts, da $element nach der Schleife nicht mehr existiert.)

Würde es dieses foreach mit dem Key nicht geben, müsste man die aktuelle Position mit array_search($element, $array) bestimmen, was deutlich langsamer wäre.

Zitat:
Wie gehe ich richtig vor, um festzustellen, was zu ändern ist, damit die zusammengebaute Zeile auch zusammenhängend, also in einer Zeile, abgespeichert wird?
Entferne den Zeilenumbruch am Ende der Zeile, bevor du weitere Zeichen anhängst. Entweder machst du das in der Schleife mit trim() oder ... na schau dir mal die Signatur von file() an.
Mit Zitat antworten
  #34 (permalink)  
Alt 02-07-2008, 01:07
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo onemorenerd.

Da sieht man mal wieder, wie man sich als Anfänger verlaufen kann.
Ich habe ja selber, um die Dateinamen einzeln in einer Zeile stehen zu haben, ein \n angefügt.
Dieses habe ich jetzt korrigiert, indem ich dem Kind einen anderen Namen gegeben habe. Der trim Befehl in Verbindung mit der Hilfsvariablen brachte das gewünschte Ergebnis.
PHP-Code:
foreach ($ArbZ as $nr => $zeile) { 
                                
$TeilZeil explode("#"$zeile);
                                
$TeilZeil[0] = str_replace(' ','',$TeilZeil[0]);
                                
$TeilZeilRepl[$nr] = str_replace($chars['browser'], $chars['replace'], $TeilZeil[0]);
                                
$TeilZeilRepl2[$nr] = ($TeilZeilRepl[$nr]."\n");
                                echo 
$TeilZeilRepl[$nr].'<br  />';
                                
$TeilZeilSour str_replace($chars['browser'], $chars['source'], $TeilZeil[0]);
                                
$TeilZeil1 $TeilZeil[1];
                                
$TeilZeil1 trim($TeilZeil1);
                                
$ZeilZusam[$nr] = $TeilZeil[0].'#'.$TeilZeil1.$TeilZeilRepl[$nr].'.php">'.$TeilZeilSour.'</a>'."\n";
                                echo 
$ZeilZusam[$nr].'<br  />';
                          }
file_put_contents ($DatNam $TeilZeilRepl2);
file_put_contents ($VorbNeu $ZeilZusam); 
Jetzt hat der Realitätstest gezeigt, das ich auch zusammengesetzte Begriffe vor dem # stehen habe und das erste und letzte Zeichen ist ein leeres. Ich kann also nicht die Leerzeichen einfach löschen, weil dann die einzelnen Wörter zusammenklatschen. Also " Wort1 wort2 Wort3 "#pfad/. Jetzt kann ich ja mit str_replace die Leerzeichen mit _ ersetzen und ebenfalls das " #" mit "#", aber wie lösche ich das erste Leerzeichen, um einen gültigen Dateinamen zu erzeugen, oder wie würdest Du die Aufgabe lösen?
Unter den Array-Befehlen habe ich nichts passendes entdeckt, weil dort nur die Manipulation zwischen den Array-Teilen, nicht aber der Inhalte behandelt wird, also muß ich vorher ansetzen.
Unter den file-Befehlen habe ich auch nichts passend scheinendes gefunden.

Gruß
Estrela
Mit Zitat antworten
  #35 (permalink)  
Alt 02-07-2008, 07:48
Wyveres
 Registrierter Benutzer
Links : Onlinestatus : Wyveres ist offline
Registriert seit: Dec 2006
Ort: Rügen
Beiträge: 763
Blog-Einträge: 2
Wyveres ist zur Zeit noch ein unbeschriebenes Blatt
Wyveres eine Nachricht über ICQ schicken
Standard

die antwort hast du dir doch schon selbst gegeben!

und mitlerweile hast du alle befehle die du brauchst.
PseudoCode
PHP-Code:
//leerzeichen davor und danach löschen
$var " hallo hier drüben ";
$var=trim($var);
//dazwischen leerzeichen ersetzen mit _
$var=str_replace(' ','_',$var); 
schau was bei trim() steht.

alternative ... Explode
__________________
Bitte Beachten.
Foren-Regeln
Danke
Mit Zitat antworten
  #36 (permalink)  
Alt 19-07-2008, 12:23
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo zusammen.
Wollte nur mal kurz ´ne Mitteilung machen, warum mitten in der Aufgabe ein Break entstand.
Weil vor ca. 14 Tagen durch eine wahrscheinlich durch einen Blitz induzierte Überspannung einige Komponenten die Funktion einstellten und jetzt die Lieferfristen doch länger sind, als erwartet, setzte ich diese kurze Meldung ab. Bin sofort wieder am Start, wenn es mir möglich ist.
Danke für das Verständnis und
mit freundlichem Gruß
Estrela
Mit Zitat antworten
  #37 (permalink)  
Alt 18-08-2008, 18:05
Estrela
 Registrierter Benutzer
Links : Onlinestatus : Estrela ist offline
Registriert seit: Jun 2008
Beiträge: 165
Estrela ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo zusammen.

Sorry, hat ja alles viel länger gedauert als gedacht.
Dafür habe ich jetzt die Ausgabe mit Einsatz von Hilfsvariablen fertig bekommen.

PHP-Code:
foreach ($ArbZ as $nr => $zeile) { 
                                
$TeilZeil explode("#"$zeile);
                                
$TeilZeil0 $TeilZeil[0];//" wort wort "#
                                
$TeilZeil01 trim($TeilZeil0);// "wort wort"#
                                
$TeilZeil1 str_replace (' ','_',$TeilZeil01);// "wort_wort"#
                                
$TeilZeil2 $TeilZeil[1];
                                
$TeilZeil2 trim ($TeilZeil2);
                                
$TeilZeilRepl[$nr] = str_replace($chars['browser'], $chars['replace'], $TeilZeil01);
                                
$TeilZeilRepl2[$nr] = ($TeilZeilRepl[$nr]."\n");
                                
$TeilZeilRepl3[$nr] = str_replace($chars['browser'], $chars['replace'], $TeilZeil1);
                                echo 
$TeilZeilRepl[$nr].'<br  />';
                                
$TeilZeilSour str_replace($chars['browser'], $chars['source'], $TeilZeil0);
                                
$ZeilZusam[$nr] = $TeilZeil0.'#'.$TeilZeil2.$TeilZeilRepl3[$nr].'.php">'.$TeilZeilSour.'</a>'."\n";
                                echo 
$ZeilZusam[$nr].'<br  />';
                          } 
Hiermit habe ich genau die Ausgabe, die ich brauche.
Dank an alle, die hier fachkundig, geduldig und konstruktiv geholfen haben.

Gruß
Estrela
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 17:19 Uhr.