PHP-Dateioperation – Daten aus anderen Dateien zu dieser Datei hinzufügen

不言
Freigeben: 2023-03-23 08:34:02
Original
1526 Leute haben es durchsucht

Der Inhalt dieses Artikels ist der PHP-Dateivorgang. Fügen Sie Daten aus anderen Dateien zu dieser Datei hinzu und teilen Sie sie jetzt mit allen. Freunde in Not können darauf verweisen.

GitHub-Quellcode
Tatsächlich Unser Programm schreibt Antworten basierend auf den folgenden Fragen:

Es gibt zwei Textdateien A.txt B.txt
A.txt 30 Millionen Zeilen, Benutzer-ID ist eindeutig, Benutzer-ID und Benutzername sind durch Leerzeichen getrennt, wie unten gezeigt:
userid username
1 yi
2 er
3 san
… …
B.txt 30 Millionen Zeilen, userid ist eindeutig, userid und realname werden durch Leerzeichen getrennt , wie unten gezeigt:
realname der Benutzer-ID
1 eins
2 zwei
3 drei
… …
Bitte schreiben Sie einen Code, um den Benutzernamen zu finden, der der Benutzer-ID in B.txt entspricht A.txt und füllen Sie es aus. Gehen Sie zur dritten Spalte von B.txt und geben Sie die Zeitkomplexität an.

In unserem Programm stehen die Zeilendaten der beiden Dateien standardmäßig in einer Eins-zu-Eins-Entsprechung, das heißt, die n-te Datenzeile in A entspricht der n-ten Datenzeile in B. In diesem Somit beträgt die zeitliche Komplexität unseres Programms O(n).

Aber im tatsächlichen Betrieb wird es definitiv eine Situation geben, in der die Datenzeilen der beiden Dateien nicht eins zu eins übereinstimmen. In diesem Fall denke ich nur an die einfachste Operation mit einer Zeitkomplexität von O(. n^2), ich weiß nicht, ob es einen besseren Algorithmus zur Lösung dieses Problems gibt.

Wenn die Datei ausgelesen und als Datenstruktur konstruiert wird, deren Abfrage O(1) oder O(logn) ist, sollte die Komplexität O(n) oder O(nlogn) werden, aber wenn eine Datei angetroffen wird Zu groß, wie gehe ich mit der Situation um, wenn die konstruierte Datenstruktur zu groß ist? Lernen Sie aus der Praxis des Datenbank-B-Tree-Index? Schreiben Sie die Antwort auf die Frage:

<?php
header("content-type:text/html;charset=utf-8");

function decodeLine(string $lineData, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return explode($delimiter, $lineData);
}

function encodeLine(array $dataList, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return implode($delimiter, $dataList);
}$testA = fopen(&#39;./TestData/FileOperation/testA.txt&#39;, &#39;r&#39;);$testB = fopen(&#39;./TestData/FileOperation/testB.txt&#39;, &#39;r+&#39;);$tmpFile = tmpfile();//while (($bBuffer = fgets($testB)) != false) {    $bList = decodeLine(trim($bBuffer, "\n\r"));    $tmpList = $bList;    if (($aBuffer = fgets($testA)) != false) {        $aList = decodeLine(trim($aBuffer, "\n\r"));        if ($aList[0] == $bList[0]) {            $strEncoding = mb_detect_encoding($aList[1], [&#39;ASCII&#39;, &#39;UTF-8&#39;, &#39;GB2312&#39;]);            $resStr = mb_convert_encoding($aList[1], &#39;UTF-8&#39;, $strEncoding);
            array_push($tmpList, $resStr."\n");
        }
    }    fwrite($tmpFile, encodeLine($tmpList));
}

rewind($tmpFile);
rewind($testB);while (!feof($tmpFile)) {    $tmpBuffer = fread($tmpFile, 1024);    fwrite($testB, $tmpBuffer);
}fclose($tmpFile);fclose($testA);fclose($testB);
Nach dem Login kopieren
Nach dem Login kopieren
Es gibt zwei Textdateien A.txt B.txt

A.txt 30 Millionen Zeilen, Benutzer-ID ist eindeutig, Benutzer-ID und Benutzername werden durch Leerzeichen getrennt, wie unten gezeigt:

Benutzer-ID-Benutzername

1 yi yi
2 er

3 san san

… …
B.txt 30 Millionen Zeilen, Benutzer-ID ist eindeutig, Benutzer-ID und Realname werden durch Leerzeichen getrennt, wie unten gezeigt:
Userid RealName 1
2 zwei
3

Bitte schreiben Sie einen Code, um den Benutzernamen zu finden, der der Benutzer-ID in b.txt in A.TXT entspricht, und geben Sie ihn in B ein. Die dritte Spalte von txt gibt die Zeitkomplexität an.

In unserem Programm stehen die Zeilendaten der beiden Dateien standardmäßig in einer Eins-zu-Eins-Entsprechung, das heißt, die n-te Datenzeile in A entspricht der n-ten Datenzeile in B. In diesem Somit beträgt die zeitliche Komplexität unseres Programms O(n).

Aber im tatsächlichen Betrieb wird es definitiv eine Situation geben, in der die Datenzeilen der beiden Dateien nicht eins zu eins übereinstimmen. In diesem Fall denke ich nur an die einfachste Operation mit einer zeitlichen Komplexität von O(. n^2), ich weiß nicht, ob es einen besseren Algorithmus zur Lösung dieses Problems gibt.

Wenn die Datei ausgelesen und als Datenstruktur konstruiert wird, deren Abfrage O(1) oder O(logn) ist, sollte die Komplexität O(n) oder O(nlogn) werden, aber wenn eine Datei angetroffen wird Zu groß, wie geht man mit der Situation um, wenn die konstruierte Datenstruktur zu groß ist? Lernen Sie aus der Praxis des Datenbank-B-Tree-Index

Verwandte Empfehlungen:

Erfassung von PHP-Dateioperationen, Dateien in einem Verzeichnis und Methoden zur Berechnung relativer Pfade

<?php
header("content-type:text/html;charset=utf-8");

function decodeLine(string $lineData, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return explode($delimiter, $lineData);
}

function encodeLine(array $dataList, string $delimiter = null)
{    if (is_null($delimiter)) {        $delimiter = &#39; &#39;;
    }    return implode($delimiter, $dataList);
}$testA = fopen(&#39;./TestData/FileOperation/testA.txt&#39;, &#39;r&#39;);$testB = fopen(&#39;./TestData/FileOperation/testB.txt&#39;, &#39;r+&#39;);$tmpFile = tmpfile();//while (($bBuffer = fgets($testB)) != false) {    $bList = decodeLine(trim($bBuffer, "\n\r"));    $tmpList = $bList;    if (($aBuffer = fgets($testA)) != false) {        $aList = decodeLine(trim($aBuffer, "\n\r"));        if ($aList[0] == $bList[0]) {            $strEncoding = mb_detect_encoding($aList[1], [&#39;ASCII&#39;, &#39;UTF-8&#39;, &#39;GB2312&#39;]);            $resStr = mb_convert_encoding($aList[1], &#39;UTF-8&#39;, $strEncoding);
            array_push($tmpList, $resStr."\n");
        }
    }    fwrite($tmpFile, encodeLine($tmpList));
}

rewind($tmpFile);
rewind($testB);while (!feof($tmpFile)) {    $tmpBuffer = fread($tmpFile, 1024);    fwrite($testB, $tmpBuffer);
}fclose($tmpFile);fclose($testA);fclose($testB);
Nach dem Login kopieren
Nach dem Login kopieren

Patch-Datei PHP-Dateioperation-Implementierungscode-Sharing

Das obige ist der detaillierte Inhalt vonPHP-Dateioperation – Daten aus anderen Dateien zu dieser Datei hinzufügen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!