String einer Länge X aus Datei 1 in Datei 2 suchen

DaRealMC

Erfahrenes Mitglied
Hallo zusammen,

hatte heute ein kleines Problem (siehe Betreff) und mir dafür dieses quick'n'dirty Script gebaut.

Vielleicht hilft's ja auch wem andres.

PHP:
<?php
// ================
// Laenge des Strings
$laenge=256;
// Aus dieser Datei wird der Suchstring entnommen
$filename1 = "haus.jpg";
// In dieser Datei wird gesucht
$filename2 = "ML.jpg";

//=================
$treffer=0;
$handle1 = fopen($filename1, "r");
$handle2 = fopen($filename2, "r");
$contents1 = fread($handle1, filesize($filename1));
$fs1=filesize($filename1);
$contents2 = fread($handle2, filesize($filename2));
$fs2=filesize($filename2);
fclose($handle1);
fclose($handle2);

for ($i = 0;$i<=$fs1-$laenge;$i++) { //so lange, bis der letzte String mit der definierten Laenge eingelesen wurde
	$suchstr=substr($contents1, $i, $laenge); //Der Suchstring der aktuellen Postition mit der definierten Laenge
	$pos = strpos($contents2, $suchstr); //Suche diesen String in der zweiten Datei

	$str=bin2hex($suchstr);	//damit die Ausgabe schoener ist
	if ($pos === false) {
		//nix
	} else {
		echo "Der String $str von $i wurde auch in $filename2 an $pos gefunden\r\n\r\n";
		$treffer++;
		
	}	
}

echo "Es gab insgesamt $treffer Uebereinstimmungen mit einer Laenge von $laenge";

?>
 
Zuletzt bearbeitet:
Warum leist du deine Dateien nicht mit file_get_contents() ein?
Nur nach deinem Titel, meine Lösung.
PHP:
//Test-Texte. Für Texte aus Files, siehe Kommentar weiter unten
$file1 = <<<F1
Bundespräsident Didier Burkhalter zieht eine positive Bilanz seines zweitägigen Besuches in den USA. Die Treffen in New York und Washington 
hätten in einer konstruktiven Atmosphäre stattgefunden, sagte Burkhalter nach dem Gespräch mit dem US-Vizepräsidenten Joe Biden.
F1;

$file2 = <<<F2
Die Vorschläge für eine friedliche Entwicklung in der Ukraine seien gut aufgenommen worden, sagte Burkhalter. Der Bundespräsident hatte diese als 
Vorsitzender der Organisation für Zusammenarbeit und Sicherheit in Europa (OSZE) sowohl vor dem UNO-Sicherheitsrat in New York am Montag, als auch 
vor dem zuständigen Ausschuss des US-Kongresses und vor US-Vizepräsident Joe Biden am Dienstag in Washington präsentiert.
F2;

//Tetx aus Files:
//$file1 = file_get_contents('file1.txt');
//$file1 = file_get_contents('file2.txt');

//Wort-Länge, die gefiltert wird
$wordLen = 10;

//Wörter extrahieren und doppelte entfernen
$words1 = array_unique(str_word_count($file1, 1));
$words2 = array_unique(str_word_count($file2, 1));

//Alle Filtern, nur diejenigen nehmen, die $wordLen lang sind 
$words1 = array_filter($words1, create_function('$word', "return strlen(\$word) == {$wordLen};"));
$words2 = array_filter($words2, create_function('$word', "return strlen(\$word) == {$wordLen};"));

//Beide Arrays vergleichen
$result = array_intersect($words1, $words2);
var_dump($result);

//Ausgabe:
// array(2) {
//     [3]=>
//     string(10) "Burkhalter"
//     [21]=>
//     string(10) "Washington"
// }

Ich sehe jetzt baer, dass du nicht nach Wörter suchst, sondern den Text einfach zerstückelst. Auch da drängen sich Arrays doch gradezu auf.
 
Mir ging es tatsächlich nicht um Wörter sondern um "Byte-Strings". Es mag durchaus auch andre, schönere Lösungen geben, will ich gar nicht bestreiten.
Code:
D:\Programme\PHP>php -e bin.php

Der String ffd8ffe000104a464946 von 0 wurde auch in ML2.jpg an 0 gefunden

Der String d8ffe000104a46494600 von 1 wurde auch in ML2.jpg an 1 gefunden

Der String ffe000104a4649460001 von 2 wurde auch in ML2.jpg an 2 gefunden

Der String e000104a464946000101 von 3 wurde auch in ML2.jpg an 3 gefunden

Der String 00104a46494600010101 von 4 wurde auch in ML2.jpg an 4 gefunden

Der String 104a4649460001010100 von 5 wurde auch in ML2.jpg an 5 gefunden

Der String 03012200021101031101 von 167 wurde auch in ML2.jpg an 167 gefunden

Der String 012200021101031101ff von 168 wurde auch in ML2.jpg an 168 gefunden

Der String 2200021101031101ffc4 von 169 wurde auch in ML2.jpg an 169 gefunden

Der String 00021101031101ffc400 von 170 wurde auch in ML2.jpg an 170 gefunden

Der String 01010101010000000000 von 186 wurde auch in ML2.jpg an 278 gefunden

^C
D:\Programme\PHP>
 
Zurück