PHP文本數(shù)據(jù)表類_PHP
Jun 01, 2016 pm 12:28 PMP>剛學(xué)習(xí)PHP,由于網(wǎng)站空間不支持?jǐn)?shù)據(jù)庫(kù),就寫(xiě)了這個(gè)類,正好來(lái)練習(xí)練習(xí).
?
/*
This TextData Class txtTbl writen by ridge.jiang mostone@hotmail.com and finished in 2003.01.01
Your can copy and use it without agreedment,It's free. But you can't use it for busness using.
You are also wellcome to modify this code in your mind. Thank for your work and tell me.
This class is for small information database so like classmater databse,they are less than 300 recorders.
If your want store and opreat more than 300 recorders,It's recommandly to use SQL server.
Your may acess the Instance of this Class with bellow function,there recommandly Do NOT use
inner var and function,because that's unsafe.
create()
drop()
open()
close()
eof()
bof()
prev()
next()
first()
end()
fieldsCount()
getValue()
setValue()
display()
location()
recNO()
recCount()
del()
append()
*/
define ("tblPath",".\\");
define ("exten",".php");
define ("fileHead"," echo \"You are wellcome!\"?".">This file only for class txtTbl");
class txtTbl {
? var $innerName="";? //數(shù)據(jù)庫(kù)名稱
? var $innerCount;? //數(shù)據(jù)庫(kù)記錄數(shù)目
? var $innerFields;? //數(shù)據(jù)庫(kù)字段列表數(shù)組
? var $inner_F_Count; //數(shù)據(jù)庫(kù)字段數(shù)目
? var $fullName;? //完整的文件名
? var $isModify = false;? //當(dāng)前記錄是否被修改
? var $fileModify = false;? //數(shù)據(jù)庫(kù)是否被修改
? var $innerRecorders;? //數(shù)據(jù)庫(kù)記錄數(shù)組
? var $curLine;? //當(dāng)前記錄號(hào)
? var $curArray;? //當(dāng)前行數(shù)組
? var $stringDel;? //保存被刪除記錄
? var $sprt1;? //數(shù)據(jù)庫(kù)記錄間的分隔符
? var $sprt2;? //數(shù)據(jù)庫(kù)字段間的分隔符
? var $innerBof = true;
? var $innerEof = false;
?
? function create($tblName,$fields,$sprt1="\n",$sprt2=""){
?if (empty($tblName)){
? echo "The textDateBase file name not appoint.";
? return false;
?}
?$fullName = tblPath.$tblName.exten;
??? if (file_exists($fullName)){
? echo "The textDateBase file is already exist.";
? return false;
?}
??? if(empty($fields)){
? echo "The fields list Array is invalid.";
? return false;
?}
?$cont = implode($sprt2,$fields);
?$cont = fileHead."\n".$cont;
?$fp = fopen($fullName,"w");
??? fwrite($fp,$cont);
?fclose($fp);
?return true;
? }
? function drop($tblName,$sprt1="\n",$sprt2=""){
?if (empty($tblName)){
? echo "The textDateBase file name not proveid.";
? return false;
?}
?if (!empty($this->innerName)){
? echo "Current file not closed,Please close it and try again.";
? return false;
?}
?$fullName = tblPath.$tblName.exten;
??? if (!file_exists($fullName)){
? echo "The textDateBase file not exist.";
? return false;
?}
?$fp = fopen($fullName,"r");
?if (!feof($fp)){
? $readFromFile = fgets($fp);
?}
?if ($readFromFile!=fileHead."\n"){
? fclose($fp);
? echo "not a valid textDataBase file.(the head is invalid.)"."\n";
? return false;
?}
?$readFromFile = "";
?if (!feof($fp)) $readFromFile.= fgets($fp);
?fclose($fp);
?$readFromFile = trim($readFromFile);
?if (empty($readFromFile)){
? echo "not a valid textDataBase file.(can't find fields define.)";
? return false;
?}
?$cont = fileHead."\n".$readFromFile;
?$fp = fopen($fullName,"w");
?fwrite($fp,$cont);
?fclose($fp);
?return true;
? }
?
?
? function open($tblName,$sprt1="\n",$sprt2=""){
?if (empty($tblName)){
? echo "The textDateBase file name not proveid.";
? return false;
?}
?if (!empty($this->innerName)){
? echo "Current file not closed,Please close it and try again.";
? return false;
?}
?$this->fullName = tblPath.$tblName.exten;
??? if (!file_exists($this->fullName)){
? echo "The textDateBase file not exist.";
? return false;
?}
?$fp = fopen($this->fullName,"r");
?if (!feof($fp)){
? $readFromFile = fgets($fp);
?}
?if ($readFromFile!=fileHead."\n"){
? fclose($fp);
? echo "not a valid textDataBase file.(the head is invalid.)"."\n";
? return false;
?}
?$readFromFile = "";
?while (!feof($fp)) $readFromFile.= fgets($fp);
?fclose($fp);
?$readFromFile = trim($readFromFile);
?if (empty($readFromFile)){
? echo "not a valid textDataBase file.(can't find fields define.)";
? return false;
?}
??? $this->innerRecorders = explode($sprt1,$readFromFile);
?$this->innerCount = count($this->innerRecorders) - 1;
??? $this->innerFields = explode($sprt2,$this->innerRecorders[0]);
??? $this->innerFieldsCount = count($this->innerFields);
?$this->innerName = $tblName;
?$this->sprt1 = $sprt1;
?$this->sprt2 = $sprt2;
?if ($this->innerCount==0){
? $this->curLine = 0;
? $this->innerEof = true;
?}else{
? $this->curLine = 1;
//? if ($this->innerCount==1) $this->innerEof = true;
??????? if (!$this->initRec()) return false;
?}
?return true;
? }
? function close(){
?if (empty($this->innerName)) return true;
?//save modify
?$isModify= false;
??? if ($this->isModify){
? $this->saveModify();
? $isModify= true;
?}
?if(isset($this->stringDel)){
? $isModify= true;
? $delNo= explode(",",$this->stringDel);
? foreach($delNo as $no){
?? $no= (integer) $no;
?? unset($this->innerRecorders[$no]);
? }
?}
?if ($isModify||$this->fileModify){
? $recorders= implode($this->sprt1,$this->innerRecorders);
? $recorders= fileHead."\n".$recorders;
? $fp = fopen($this->fullName,"w");
? fwrite($fp,$recorders);
? fclose($fp);
?}
?$this->innerName="";
?unset($this->innerRecorders);
?unset($this->curArray);
? }
? function next(){
?? if ((!$this->innerEof)&&(!empty($this->innerName))){
??? if($this->curLine==$this->innerCount){
???? $this->innerEof = true;
???? return true;
??? }
??? $this->saveModify();
??? $this->curLine++;
??? if ($this->innerBof) $this->innerBof = false;
??? $this->initRec();
?? }
?? return false;
? }
?
? function prev(){
?? if ((!$this->innerBof)&&(!empty($this->innerName))){
??? $this->saveModify();
??? $this->curLine--;
??? if ($this->curLine == 1)
???? $this->innerBof = true;
??? if ($this->innerEof) $this->innerEof = false;
??? $this->initRec();
?? }
? }
? function first(){
??? if ($this->innerBof||empty($this->innerName))
? return false;
??? $this->saveModify();
?$this->curLine = 1;
?$this->innerBof= true;
?$this->innerEof = false;
?$this->initRec();
?
? }
?
? function end(){
??? if ($this->innerEof||empty($this->innerName))
? return false;
??? $this->saveModify();
?$this->curLine = $this->innerCount;
?$this->innerEof= true;
?$this->innerBof = false;
?$this->initRec();
?
? }
?
? function eof(){
?? if (empty($this->innerName)){
??? return false;
?? }else return $this->innerEof;
? }
? function bof(){
?? if (empty($this->innerName)){
??? return true;
?? }else return $this->innerBof;
? }
? function recNo(){
?? return $this->curLine;
? }
? function recCount(){
?? return $this->innerCount;
? }
? function fieldsCount(){
?? if (empty($this->innerName)){
??? return false;
?? }else return $this->inner_F_Count;
? }
? function getValue($field){
?if ($this->curLine==0||empty($this->innerName)){
? echo "Can't read current record,maybe not in use or no record.";
? return false;
?}
?$field= $this->chkField($field);
??? if ($field==-1){
? return false;
?}
?return $this->curArray[$field];
? }
?
? function setValue($field,$value){
??? if ($this->curLine==0||empty($this->innerName)){
? echo "Can't read current record,maybe not in use or no record.";
? return false;
?}
?$field= $this->chkField($field);
?if ($field==-1){
? return false;
?}
?$this->curArray[$field]= $value;
?$this->modify= true;
? }
?
? function display($shownon=0,$sprt1="
?echo $sprt3;
?foreach($this->curArray as $v){
? if($shownon==1&&empty($v)) $v= "noValue";
? echo $sprt1.$v.$sprt2;
?}
?echo $sprt4;
? }
? function location($field,$keyValue){
??? $field=$this->chkField($field);
?if ($field==-1) return false;
?for($i=$this->curLine;$iinnerCount;$i++){
? if($this->curArray[$field]==$keyValue){
?? return true;
? }
? $this->next();
?}
?return false;
? }
?
? function del($recNo=-1){
?if($this->curLine==0) return false;
?$vartype= gettype($recNo);
?if($vartype!="integer"){
? echo "del error:check ur para type.";
? return false;
?}
??? if ($recNo==-1){
? $recNo=$this->curLine;}
?elseif ($recNo>$this->innerCount||$recNo? echo "del error:out over the rang.";
? return false;
?}
?if (!$this->chkDel($recNo)){
? if(isset($this->stringDel)){
?? $this->stringDel.=(','.$recNo);
? }else $this->stringDel = (string) $recNo;
?}else return false;
? }
??
? function append($fields=""){
?$this->saveModify();
?for($i=1;$iinnerFieldsCount;$i++)
? $newRec[] = "";
??? if(!empty($fields)){
? foreach($fields as $k=>$v){
?? $k= $this->chkField($k);
?? if ($k==-1){
??? return false;
?? }
??????????? $newRec[$k]= $v;
? }
?}
?$this->innerCount++;
?$this->curLine = $this->innerCount;
?$this->innerBof = false;
?$this->innerEof = true;
?unset($this->curArray);
?$this->curArray = &$newRec;
?$this->isModify = true;
? }
?
?//保存修改
?function saveModify(){
? if($this->isModify){
?? $this->innerRecorders[$this->curLine]= implode($this->sprt2,$this->curArray);
?? $this->isModify = false;
?? $this->fileModify= true;
? }
?}
?//當(dāng)指針發(fā)生變化時(shí),初始化當(dāng)前記錄數(shù)組
?function initRec(){
? $this->curArray = explode($this->sprt2,$this->innerRecorders[$this->curLine]);
? if (count($this->curArray)!=$this->innerFieldsCount){
?? echo "The Current Recorder fields count unequal to Table's.\n File will close.";
?? $this->close();
?? return false;
? }
? return true;
?}
?//輸出當(dāng)前記錄信息,設(shè)計(jì)為調(diào)試用
?function ddisplay(){
? if ($this->innerCount==0) return false;
? foreach($this->innerFields as $v) echo $v."----";
? echo "
";
? foreach($this->curArray as $v) echo $v."---";
?}
?//檢查記錄是否已被刪除
?function chkDel($key){
? if (empty($key)&&$key!=0){
?? echo "the key not appoint.";
?? return false;
? }
? if (!isset($this->stringDel)){
?? return false;
? }
? if (ereg("(^|,)".$key."(,|$)",$this->stringDel)){
?? return true;
? }
? return false;
?}
?//檢查提交的字段名是否合法.
?function chkField($field){
? if (empty($field)&&($field!=0)){
?? echo "the field not appoint.";
?? return -1;
? }
? $vartype = gettype($field);
? switch ($vartype) {
?? case "integer":
??? if ($field>=$this->innerFieldsCount){
??????? echo "the field is large than fieldscount";
??????? return -1;
??? }elseif($field???? echo "the field is less than 0";
???? return -1;
??? }
??? return $field;
? case "string":
?? foreach ($this->innerFields as $k=>$v) if ($field==$v) return $k;
?? echo "the field name not found.";
?? return -1;
? default:
?? echo "the field is invalid.";
?? return -1;
? }
?}
}
?>

Hei?e KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?er Artikel

Hei?e Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

DDREASE ist ein Tool zum Wiederherstellen von Daten von Datei- oder Blockger?ten wie Festplatten, SSDs, RAM-Disks, CDs, DVDs und USB-Speicherger?ten. Es kopiert Daten von einem Blockger?t auf ein anderes, wobei besch?digte Bl?cke zurückbleiben und nur gute Bl?cke verschoben werden. ddreasue ist ein leistungsstarkes Wiederherstellungstool, das vollst?ndig automatisiert ist, da es w?hrend der Wiederherstellungsvorg?nge keine Unterbrechungen erfordert. Darüber hinaus kann es dank der ddasue-Map-Datei jederzeit gestoppt und fortgesetzt werden. Weitere wichtige Funktionen von DDREASE sind: Es überschreibt die wiederhergestellten Daten nicht, füllt aber die Lücken im Falle einer iterativen Wiederherstellung. Es kann jedoch gekürzt werden, wenn das Tool explizit dazu aufgefordert wird. Stellen Sie Daten aus mehreren Dateien oder Bl?cken in einer einzigen wieder her

0.Was bewirkt dieser Artikel? Wir schlagen DepthFM vor: ein vielseitiges und schnelles generatives monokulares Tiefensch?tzungsmodell auf dem neuesten Stand der Technik. Zus?tzlich zu herk?mmlichen Tiefensch?tzungsaufgaben demonstriert DepthFM auch hochmoderne F?higkeiten bei nachgelagerten Aufgaben wie dem Tiefen-Inpainting. DepthFM ist effizient und kann Tiefenkarten innerhalb weniger Inferenzschritte synthetisieren. Lassen Sie uns diese Arbeit gemeinsam lesen ~ 1. Titel der Papierinformationen: DepthFM: FastMonocularDepthEstimationwithFlowMatching Autor: MingGui, JohannesS.Fischer, UlrichPrestel, PingchuanMa, Dmytr

Wenn Sie wissen müssen, wie Sie die Filterung mit mehreren Kriterien in Excel verwenden, führt Sie das folgende Tutorial durch die Schritte, um sicherzustellen, dass Sie Ihre Daten effektiv filtern und sortieren k?nnen. Die Filterfunktion von Excel ist sehr leistungsstark und kann Ihnen dabei helfen, aus gro?en Datenmengen die ben?tigten Informationen zu extrahieren. Diese Funktion kann Daten entsprechend den von Ihnen festgelegten Bedingungen filtern und nur die Teile anzeigen, die die Bedingungen erfüllen, wodurch die Datenverwaltung effizienter wird. Mithilfe der Filterfunktion k?nnen Sie Zieldaten schnell finden und so Zeit beim Suchen und Organisieren von Daten sparen. Diese Funktion kann nicht nur auf einfache Datenlisten angewendet werden, sondern auch nach mehreren Bedingungen gefiltert werden, um Ihnen dabei zu helfen, die ben?tigten Informationen genauer zu finden. Insgesamt ist die Filterfunktion von Excel sehr praktisch

Stehen Sie vor einer Verz?gerung oder einer langsamen mobilen Datenverbindung auf dem iPhone? Normalerweise h?ngt die St?rke des Mobilfunk-Internets auf Ihrem Telefon von mehreren Faktoren ab, wie z. B. der Region, dem Mobilfunknetztyp, dem Roaming-Typ usw. Es gibt einige Dinge, die Sie tun k?nnen, um eine schnellere und zuverl?ssigere Mobilfunk-Internetverbindung zu erhalten. Fix 1 – Neustart des iPhone erzwingen Manchmal werden durch einen erzwungenen Neustart Ihres Ger?ts viele Dinge zurückgesetzt, einschlie?lich der Mobilfunkverbindung. Schritt 1 – Drücken Sie einfach einmal die Lauter-Taste und lassen Sie sie los. Drücken Sie anschlie?end die Leiser-Taste und lassen Sie sie wieder los. Schritt 2 – Der n?chste Teil des Prozesses besteht darin, die Taste auf der rechten Seite gedrückt zu halten. Lassen Sie das iPhone den Neustart abschlie?en. Aktivieren Sie Mobilfunkdaten und überprüfen Sie die Netzwerkgeschwindigkeit. überprüfen Sie es erneut. Fix 2 – Datenmodus ?ndern 5G bietet zwar bessere Netzwerkgeschwindigkeiten, funktioniert jedoch besser, wenn das Signal schw?cher ist

Die von Google gef?rderte Leistung von JAX hat in jüngsten Benchmark-Tests die von Pytorch und TensorFlow übertroffen und belegt bei 7 Indikatoren den ersten Platz. Und der Test wurde nicht auf der TPU mit der besten JAX-Leistung durchgeführt. Obwohl unter Entwicklern Pytorch immer noch beliebter ist als Tensorflow. Aber in Zukunft werden m?glicherweise mehr gro?e Modelle auf Basis der JAX-Plattform trainiert und ausgeführt. Modelle Kürzlich hat das Keras-Team drei Backends (TensorFlow, JAX, PyTorch) mit der nativen PyTorch-Implementierung und Keras2 mit TensorFlow verglichen. Zun?chst w?hlen sie eine Reihe von Mainstream-Inhalten aus

Das neueste Video von Teslas Roboter Optimus ist ver?ffentlicht und er kann bereits in der Fabrik arbeiten. Bei normaler Geschwindigkeit sortiert es Batterien (Teslas 4680-Batterien) so: Der Beamte hat auch ver?ffentlicht, wie es bei 20-facher Geschwindigkeit aussieht – auf einer kleinen ?Workstation“, pflücken und pflücken und pflücken: Dieses Mal wird es freigegeben. Eines der Highlights Der Vorteil des Videos besteht darin, dass Optimus diese Arbeit in der Fabrik v?llig autonom und ohne menschliches Eingreifen w?hrend des gesamten Prozesses erledigt. Und aus Sicht von Optimus kann es auch die krumme Batterie aufnehmen und platzieren, wobei der Schwerpunkt auf der automatischen Fehlerkorrektur liegt: In Bezug auf die Hand von Optimus gab der NVIDIA-Wissenschaftler Jim Fan eine hohe Bewertung ab: Die Hand von Optimus ist der fünffingrige Roboter der Welt am geschicktesten. Seine H?nde sind nicht nur taktil

In der C-Sprache wird die if-Anweisung normalerweise verwendet, um einen bestimmten Codeblock basierend auf einer einzelnen Bedingung auszuführen. Es k?nnen jedoch mehrere Bedingungen kombiniert werden, um mithilfe logischer Operatoren wie &&, || und ! eine Entscheidung zu treffen. Einschlie?lich der Verwendung von logischem UND (&&) zur Beurteilung mehrerer Bedingungen, der Verwendung von logischem ODER (||) zur Beurteilung mindestens einer Bedingung, der Verwendung von logischem NICHT (!) zur Beurteilung der Negation einer einzelnen Bedingung sowie der Verschachtelung von if-Anweisungen und der Verwendung von Klammern um die Priorit?t zu kl?ren.

Kürzlich wurde die Milit?rwelt von der Nachricht überw?ltigt: US-Milit?rkampfflugzeuge k?nnen jetzt mithilfe von KI vollautomatische Luftk?mpfe absolvieren. Ja, erst kürzlich wurde der KI-Kampfjet des US-Milit?rs zum ersten Mal der ?ffentlichkeit zug?nglich gemacht und sein Geheimnis gelüftet. Der vollst?ndige Name dieses J?gers lautet ?Variable Stability Simulator Test Aircraft“ (VISTA). Er wurde vom Minister der US-Luftwaffe pers?nlich geflogen, um einen Eins-gegen-eins-Luftkampf zu simulieren. Am 2. Mai startete US-Luftwaffenminister Frank Kendall mit einer X-62AVISTA auf der Edwards Air Force Base. Beachten Sie, dass w?hrend des einstündigen Fluges alle Flugaktionen autonom von der KI durchgeführt wurden! Kendall sagte: ?In den letzten Jahrzehnten haben wir über das unbegrenzte Potenzial des autonomen Luft-Luft-Kampfes nachgedacht, aber es schien immer unerreichbar.“ Nun jedoch,
