16. oktober 2003 - 19:25
Der er
34 kommentarer og 2 løsninger
læse ting ind i mysql fra en tekstfil
Er der en herind der lige har en overskulig løsning til hvordan man læser ting ind fra en tekst fil.. den fil jeg gerne vil læse ind fra er.. fra nero infotool 1.txt Nero InfoTool 2.00 Hardware Information -------------------- CPU : 1200 MHz Bus Speed : 66 MHz Motherboard : ECS 7S5A System : ECS 7S5A BIOS : AMI 7.00T Memory : 256 MB Sound : C-Media Wave Device Video : NVIDIA Vanta
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
16. oktober 2003 - 19:43
#1
$file = fopen("1.txt"); $nvalue = array(); for ($i=2;$i<count($file);$i++) { list($enhed, $value) = explode(":", $file[$i]; array_push($nvalue, $value); } $query = "INSERT INTO tabel (CPU, Bus, Mb, System, BOIS, Mem, Sound, Video) VALUES ('$nvalue[0]', '$nvalue[1]', $nvalue[2]', '$nvalue[3]', '$nvalue[4]', '$nvalue[5]', '$nvalue[6]', '$nvalue[7]')"; if (mysql_query($query)) { echo "data indsat"; } else { echo "fejl"; } ovenstående er IKKE testet
16. oktober 2003 - 19:44
#2
har allerede fundet første fejl. 1. linie skal være: $file = file("1.txt");
16. oktober 2003 - 19:49
#3
$file = file("1.txt"); $nvalue = array(); for ($i=2;$i<count($file);$i++) { list($enhed, $value) = explode(":", $file[$i]); $value = trim($value); array_push($nvalue, $value); } $query = "INSERT INTO tabel (CPU, Bus, Mb, System, BOIS, Mem, Sound, Video) VALUES ('$nvalue[0]', '$nvalue[1]', $nvalue[2]', '$nvalue[3]', '$nvalue[4]', '$nvalue[5]', '$nvalue[6]', '$nvalue[7]')"; if (mysql_query($query)) { echo "data indsat"; } else { echo "fejl"; } vi prøver lige igen :)
16. oktober 2003 - 19:51
#4
Mit forslag: $lines = file('1.txt'); foreach ($lines as $line) { if (strpos($line, ":")) { list($key[], $val[]) = explode(":", $line); } } $keys = implode(", ", $key); $values = implode("', '", $val); $qstr = "INSERT INTO tabel_navn ($keys) VALUES ('$values')"; mysql_query($qstr) or die(mysql_error());
16. oktober 2003 - 20:09
#5
Tak for de hurtige svar.. jeg kigger lige på dem og vender tilbage
16. oktober 2003 - 20:27
#6
Jeg har prøvet den nederste af ( detox ) den virker kun hvis jeg fjerner speed fra Bus Speed.. er der nogen måde man kan komme ud over det mellem rum
16. oktober 2003 - 20:32
#7
holybull din sidete script melder bare fejl. når jeg køre det..
16. oktober 2003 - 20:33
#8
prøv og ændre strpos til strstr
16. oktober 2003 - 20:33
#9
buc
16. oktober 2003 - 20:33
#10
argh sry sidste var en fejl, men hvilken fejl melder min da ?
16. oktober 2003 - 20:37
#11
Bare fejl.. min kode er her.. jeg har dog ændret nogle ting. for så passede med med den anden jeg prøvede.. <? $host = "127.0.0.1"; $user = "root"; $password = "***"; $dbname = "tabel"; $conn = mysql_connect($host, $user, $password); mysql_select_db($dbname, $conn); ?> <? $file = file("1.txt"); $nvalue = array(); for ($i=2;$i<count($file);$i++) { list($enhed, $value) = explode(":", $file[$i]); $value = trim($value); array_push($nvalue, $value); } $query = "INSERT INTO tablename (CPU , Bus , Motherboard , System , BIOS , Memory , Sound , Video) VALUES ('$nvalue[0]', '$nvalue[1]', $nvalue[2]', '$nvalue[3]', '$nvalue[4]', '$nvalue[5]', '$nvalue[6]', '$nvalue[7]')"; if (mysql_query($query)) { echo "data indsat"; } else { echo "fejl"; } ?>
16. oktober 2003 - 20:37
#12
Ja, jeg måtte sande værdien af trim(). Dette fungerer: $lines = file('1.txt'); foreach ($lines as $line) { if (strpos($line, ":")) { list($k, $v) = explode(":", $line); $key[] = trim($k); $val[] = trim($v); } } $keys = implode("`,`", $key); $values = implode("', '", $val); $qstr = "INSERT INTO pc (`$keys`) VALUES ('$values')"; mysql_query($qstr) or die(mysql_error());
16. oktober 2003 - 20:38
#13
mine tabeller. CREATE TABLE `tablename` ( `CPU` varchar(255) default NULL, `Bus` varchar(255) default NULL, `Motherboard` varchar(255) default NULL, `System` varchar(255) default NULL, `BIOS` varchar(255) default NULL, `Memory` varchar(255) default NULL, `Sound` varchar(255) default NULL, `Video` varchar(255) default NULL ) TYPE=MyISAM;
16. oktober 2003 - 20:39
#14
Og ved brug af 'backtics' virker den nu osse med 'Bus Speed'
16. oktober 2003 - 20:44
#15
Ja.. de kan jeg se.. hvis man nu har mange txt filer der skal ind og den eneste forskel er fil navnet ( 1.txt 2.txt OSV ) hvordan kan man så få den til at tage dem automatisk.. det gør ingen ting at der skal lavet et feldt der hedder ID i mysql
16. oktober 2003 - 20:51
#16
function txttilsql($file) { $lines = file($file); foreach ($lines as $line) { if (strpos($line, ":")) { list($k, $v) = explode(":", $line); $key[] = trim($k); $val[] = trim($v); } } $keys = implode("`,`", $key); $values = implode("', '", $val); $qstr = "INSERT INTO pc (`$keys`) VALUES ('$values')"; mysql_query($qstr) or die(mysql_error()); } så kalder du blot funktionen txttilsql("1.txt"); txttilsql("2.txt"); etc du kan også gøre sådan her $dir = opendir($dir); while (($file = readdir($dir))!==false) { if ($file != ".." && $file != ".") txttilsql($file); } }
16. oktober 2003 - 20:52
#17
Fx, med et id-felt 'ID': $antal_filer = 3; for ($i=1;$i<=$antal_filer;$i++) { $filnavn = $i.".txt"; $lines = file($filnavn); foreach ($lines as $line) { if (strpos($line, ":")) { list($k, $v) = explode(":", $line); $key[] = trim($k); $val[] = trim($v); } } $keys = implode("`,`", $key); $values = implode("', '", $val); $qstr = "INSERT INTO pc (ID, `$keys`) VALUES ($i, '$values')"; mysql_query($qstr) or die(mysql_error()); }
16. oktober 2003 - 20:55
#18
jeg vil give detox halv ret, blot ville jeg bruge et auto-increment felt og så skrive tekst -> sql som en funktion og bruge readdir
16. oktober 2003 - 20:56
#19
Tabellen jeg har testet på: CREATE TABLE `pc` ( `ID` smallint(6) unsigned NOT NULL default '0', `CPU` varchar(255) default NULL, `Bus Speed` varchar(255) default NULL, `Motherboard` varchar(255) default NULL, `System` varchar(255) default NULL, `BIOS` varchar(255) default NULL, `Memory` varchar(255) default NULL, `Sound` varchar(255) default NULL, `Video` varchar(255) default NULL ) TYPE=MyISAM
16. oktober 2003 - 20:58
#20
min begrundelse for valget af readdir, buch har jo ikke fastlagt at filerne hedder 1.txt 2.txt etc.
16. oktober 2003 - 20:58
#21
citat: 'og den eneste forskel er fil navnet ( 1.txt 2.txt OSV )'
16. oktober 2003 - 20:59
#22
sry detox nok bare mig der sover.. men stadig synes jeg løsningen med readdir er bedst fordi du ikke skal ind og sætte antallet af filer
16. oktober 2003 - 21:01
#23
kommer self. igen an på hvad scriptet skal bruges til, hvis det blot er for at sætte nogle tekstfiler i en database er din løsning jo fin, jeg tænkte nok mere i baner hvis det skal bruges lidt mere dynamisk
16. oktober 2003 - 21:01
#24
holybull -> Men det forhindrer selvfølgelig ikke, at man ikke kan lave det mere flexibelt og måske mere anvendeligt i andre sammenhæng. Fx ved brug af funktioner som du foreslår. Lidt finpudsning er jo aldrig af vejen.
16. oktober 2003 - 21:36
#25
Her er et forsøg på noget af det holybull foreslår, med et autoincreament id felt og en funktion der finder filerne i en mappe. Det gør det da unægteligt mere flexibelt/dynamisk.: <? require 'connect.inc.php'; $dir = 'test_mappe'; $filer = getfiles($dir); foreach ($filer as $fil) { $lines = file($fil); $key = array(); $val = array(); foreach ($lines as $line) { if (strpos($line, ":")) { list($k, $v) = explode(":", $line); $key[] = trim($k); $val[] = trim($v); } } $keys = implode("`,`", $key); $values = implode("', '", $val); $qstr = "INSERT INTO pc (`$keys`) VALUES ('$values')"; mysql_query($qstr) or die(mysql_error()); echo $qstr."<br /><br />"; } //Funktion der henter filnavnene fra $dirName function getfiles ($dirName) { $d = dir($dirName); while($entry = $d->read()) { if (!is_dir($entry)) { $file[] = $dirName."/".$entry; } } $d->close(); return $file; }//END Function ?>
16. oktober 2003 - 21:56
#26
nu begynder det sku at ligne noget... men mysql brokker sig over at der står det samme i Motherboard & System
16. oktober 2003 - 21:58
#27
Jeg Har godt nok ikke sat ID til autoincreament.. da jeg godt kunne tænke mig at filnavnet skal stå her..
16. oktober 2003 - 22:02
#28
Bare glem det med at ysql brokker sig... det gør den nemmelig ikke mere når ID bliver autoincreament
16. oktober 2003 - 22:06
#29
Ok, men det med filnavnet er jo en god idé: Fx sådan her: CREATE TABLE `pc` ( `ID` smallint(6) unsigned NOT NULL auto_increment, `filnavn` varchar(255) default NULL, `CPU` varchar(255) default NULL, `Bus Speed` varchar(255) default NULL, `Motherboard` varchar(255) default NULL, `System` varchar(255) default NULL, `BIOS` varchar(255) default NULL, `Memory` varchar(255) default NULL, `Sound` varchar(255) default NULL, `Video` varchar(255) default NULL, PRIMARY KEY (`ID`) ) TYPE=MyISAM <? require 'connect.inc.php'; $dir = 'test_mappe'; $filer = getfiles($dir); foreach ($filer as $fil) { $sti = $dir."/".$fil; $lines = file($sti); $key = array(); $val = array(); foreach ($lines as $line) { if (strpos($line, ":")) { list($k, $v) = explode(":", $line); $key[] = trim($k); $val[] = trim($v); } } $keys = implode("`,`", $key); $values = implode("', '", $val); $qstr = "INSERT INTO pc (`filnavn`, `$keys`) VALUES ('$fil', '$values')"; mysql_query($qstr) or die(mysql_error()); echo $qstr."<br /><br />"; } //Funktion der henter filnavnene fra $dirName function getfiles ($dirName) { $d = dir($dirName); while($entry = $d->read()) { if (!is_dir($entry)) { $file[] = $entry; } } $d->close(); return $file; }//END Function ?>
16. oktober 2003 - 22:10
#30
er filnavn en kendt funktion... jeg kan ikke se hvor den får den fra
16. oktober 2003 - 22:14
#31
Næ, filnavnene finder den i funktionen getfiles()
16. oktober 2003 - 22:16
#32
Kunne osse gøres sådan (måske mere overskueligt): <? require 'connect.inc.php'; $dir = 'test_mappe'; $filer = getfiles($dir); foreach ($filer as $fil) { $sti = $dir."/".$fil; $lines = file($sti); $key = array('filnavn'); $val = array($fil); foreach ($lines as $line) { if (strpos($line, ":")) { list($k, $v) = explode(":", $line); $key[] = trim($k); $val[] = trim($v); } } $keys = implode("`,`", $key); $values = implode("', '", $val); $qstr = "INSERT INTO pc (`$keys`) VALUES ('$values')"; mysql_query($qstr) or die(mysql_error()); echo $qstr."<br /><br />"; } //Funktion der henter filnavnene fra $dirName function getfiles ($dirName) { $d = dir($dirName); while($entry = $d->read()) { if (!is_dir($entry)) { $file[] = $entry; } } $d->close(); return $file; }//END Function ?>
16. oktober 2003 - 22:17
#33
ok det vil jeg så lige læse lidt om... gidder du ikke smide et svar detox
16. oktober 2003 - 22:21
#34
echo $qstr."<br /><br />"; kunne ændres til (lidt mere sigende): echo $fil." er indsat i databasen<br />";
20. oktober 2003 - 21:14
#35
ved at være lukketid her omkring ? :-)
20. oktober 2003 - 21:18
#36
så lad da gå
Vi tilbyder markedets bedste kurser inden for webudvikling