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. |
 |
|

02-08-2004, 02:00
|
langerxxx
Member
|
|
Registriert seit: Dec 2001
Beiträge: 210
|
|
String mit .txt-Datei vergleichen + ersetzen
Hallo zusammen,
ich möchte folgendes umsetzen, aber irgendwie fehlt mir noch die zündende Idee.
Ich habe eine .txt-Datei in der diverse Begriffe und Buchstabenkombinationen stehen, die jeweils mit Kommata getrennt sind.
txt-Datei: begriff1a,begriff1b,...
Des Weiteren habe ich einen String, der einen bis x Begriffe enthält, die jeweils durch ein Leerzeichen getrennt sind.
String: begriff2a begriff2b ...
Jetzt möchte ich für jeden einzelnen Begriff aus dem String überprüfen, ob eine Übereinstimmung mit irgendeinem der Begriffe aus der txt-Datei besteht. Ist dies der Fall, soll der betroffene Begriff aus dem String entfernt werden.
Mit preg_replace() habe ich es leider nicht hinbekommen.
Würde mich sehr freuen, wenn mir jemand mal einen Denkanstoß geben könnte, gerne auch in Code-Form...
Danke im voraus und viele Grüße
Langer
|

02-08-2004, 02:41
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
Re: String mit .txt-Datei vergleichen + ersetzen
Zitat:
Würde mich sehr freuen, wenn mir jemand mal einen Denkanstoß geben könnte, gerne auch in Code-Form...
|
es geht ... mit explode beide texte aufteilen in arrays, dann mit array_diff (string - textdatei) bearbeiten, ...
array_diff() gibt ein Array mit allen Werten von string, welche nicht in textdatei enthalten sind, zurück.
http://www.php-resource.de/manual.ph...ion.array-diff
__________________
Die Zeit hat ihre Kinder längst gefressen
|

02-08-2004, 15:39
|
langerxxx
Member
|
|
Registriert seit: Dec 2001
Beiträge: 210
|
|
Hallo,
schonmal danke für den Tipp.
$noise enthält ein Array mit den Begriffen, die aus dem Array $suchstring entfernt werden sollen
Einlesen und explode funktioniert ohne Probleme. Wenn ich die beiden Arrays allerdings vergleiche, wirft er mir die in $noise enthaltenen Begriffe aus $suchstring nicht raus. Das Array $suchstring_diff stimmt mit dem Array $suchstring aber vollkommen überein.
PHP-Code:
$noisedatei = "noise.txt";
$txt = fopen($noisedatei,"r");
$noise = fread ($txt, filesize ($noisedatei));
fclose($txt);
$suchstring = explode (" ", $suchstring);
$noise = explode (",", $noise);
$suchstring_diff = array_diff ($suchstring, $noise);
print_r($suchstring_diff);
Hat noch jemand eine Idee, was da falsch sein könnte?
Danke im voraus und viele Grüße
Langer
Geändert von langerxxx (02-08-2004 um 16:02 Uhr)
|

02-08-2004, 15:57
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
Zitat:
Wenn ich die beiden Arrays allerdings vergleiche, wirft er mir die in $noise enthaltenen Begriffe aus $suchstring nicht raus. Das Array $suchstring bleibt unverändert bestehen.
|
ja, so ist es auch vorgesehen. die funktion gibt das erzeugte array zurück, die originale bleiben unverändert. wo ist das problem?
__________________
Die Zeit hat ihre Kinder längst gefressen
|

02-08-2004, 16:03
|
langerxxx
Member
|
|
Registriert seit: Dec 2001
Beiträge: 210
|
|
Oh, sorry, da hab ich mich falsch ausgedrückt!
In $suchstring_diff steht das gleiche wie in $suchstring, auch wenn es definitv übereinstimmende Begriffe zwischen $noise und $suchstring gibt...
Danke und viele Grüße
Langer
|

02-08-2004, 16:15
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
nein!
ich habs doch eben noch einmal ausprobiert, bei mir funktioniert es ...
hast du beide arrays mal per var_dump ausgegeben?
sind elemente wirklich gleich?
eventuell trim() angewendet?
...
__________________
Die Zeit hat ihre Kinder längst gefressen
|

02-08-2004, 16:59
|
langerxxx
Member
|
|
Registriert seit: Dec 2001
Beiträge: 210
|
|
Thx für den Hinweis, eine Fehlerquelle ist schonmal rausgefallen. Da hatten sich tatsächlich Leerzeichen aus der txt-Datei eingeschlichen.
Ich habe jetzt mal beide Arrays mit var_dump ausgegeben. Was merkwürdig ist:
Eintrag zu "Ihre" aus $suchstring:
[0]=> string(4) "Ihre"
Eintrag zu "Ihre" aus $noise:
[20]=> string(11) "Ihre"
Zusatz von 18:09 h:
Ich habe mir gerade mal den zugehörigen HTML-Quelltext zu var_dump angeschaut, da wird "Ihre" folgernmaßen dargestellt:
[20]=> string(11) " I h r e "
Wenn ich es recht verstehe, sind die enthaltenen Buchstaben gleich, aber durch die unterschiedliche Länge sind die String trotzdem nicht gleich.
Woran könnte das liegen? Kann man das irgendwie korrigieren?
Danke und viele Grüße
Langer
Geändert von langerxxx (02-08-2004 um 18:14 Uhr)
|

02-08-2004, 18:13
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
probier mal
PHP-Code:
for ($i=0; $i<strlen($noise[20]); $i++)
echo 'Char: ['.$noise[20][$i].'] - Code:'.ord($noise[20][$i]).']<br />';
ausgabe?
edit:
Zitat:
zugehörigen HTML-Quelltext zu var_dump angeschaut
|
der ausgabe im browser solltest du in solchen fällen niemals trauen, immer in den quellcode schauen ...
dann such die stelle, wo der code das erzeugt, was du nicht willst ...
__________________
Die Zeit hat ihre Kinder längst gefressen
Geändert von derHund (02-08-2004 um 18:15 Uhr)
|

02-08-2004, 18:17
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
PHP-Code:
$noise = explode (",", $noise);
sowas ist auch immer sehr unelegant ...
__________________
Die Zeit hat ihre Kinder längst gefressen
|

02-08-2004, 18:21
|
langerxxx
Member
|
|
Registriert seit: Dec 2001
Beiträge: 210
|
|
Hallo,
die Ausgabe ist folgende:
Char: [] - Code:0]
Char: [I] - Code:73]
Char: [] - Code:0]
Char: [h] - Code:104]
Char: [] - Code:0]
Char: [r] - Code:114]
Char: [] - Code:0]
Char: [e] - Code:101]
Char: [] - Code:0]
Char: [] - Code:0]
Char: [] - Code:0]
Ähnlich wie im HTML-Quelltext, was ich im obigen Beitrag noch ergänzt hatte. D.h. er setzt in den String irgendwelche Zeichen rein.
Leerzeichen scheinen es ja nicht zu sein, die werden über
PHP-Code:
$noise = preg_replace("/\s/s","",$noise);
ja bereits entfernt.
Oh man... Wie kann man die "überflüssigen" Zeichen denn entfernen?
Danke dir schonmal super viel für deine bisherige Hilfe!!!!
Viele Grüße
Langer
|

02-08-2004, 18:26
|
langerxxx
Member
|
|
Registriert seit: Dec 2001
Beiträge: 210
|
|
Zitat:
PHP-Code:
$noise = explode (",", $noise);
sowas ist auch immer sehr unelegant ...
|
In wie fern unelegant?
Zitat:
dann such die stelle, wo der code das erzeugt, was du nicht willst ...
|
Tja, gute Frage. Eigentlich kann es da nur eine Stelle geben. Das wäre dann das auslesen der txt-Datei... Aber im txt-Format sollten doch eigentlich keine überflüssigen Zeichen stehen...
Danke und Gruß
Langer
|

02-08-2004, 18:29
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
häng mal bitte die noise.txt dran, und zeig deinen gesamten, verarbeitenden code ...
Zitat:
Leerzeichen scheinen es ja nicht zu sein,
|
nee ^^
versuch mal, per replace das zeichen chr(0) zu entfernen ...
unelegenat ist imho,
weil du den string nach array castest und dann überschreibst, naja, steh ich halt nicht so drauf ...
__________________
Die Zeit hat ihre Kinder längst gefressen
|

02-08-2004, 18:46
|
langerxxx
Member
|
|
Registriert seit: Dec 2001
Beiträge: 210
|
|
@derHund:
Thx für deine Hilfe. Das Problem liegt wirklich am auslesen der txt-Datei. Aus irgendeinem Grund setzt PHP dabei dieses chr(0) zwischen die Buchstaben.
Ich habe daraus jetzt einfach eine php-Datei gemacht und den String in eine Variable geschrieben.
Jetzt funktioniert alles wunderbar!
Danke vielmals, ohne deine Hilfe hätte ich das nicht hinbekommen!
Grüße
Langer
|

02-08-2004, 18:50
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 25.236
|
|
Zitat:
Original geschrieben von langerxxx
Aus irgendeinem Grund setzt PHP dabei dieses chr(0) zwischen die Buchstaben.
|
na ja, ich frage mich sowieso, warum du für das auslesen einer ASCII-datei die funktion fread nutzt, die für das auslesen von binärdaten gedacht ist ...?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

02-08-2004, 18:53
|
derHund
PHP Master
|
|
Registriert seit: Aug 2003
Ort: Hundehütte
Beiträge: 5.293
|
|
__________________
Die Zeit hat ihre Kinder längst gefressen
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|