Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 18. 5. 2009, 14:40:59
Zdravim,
Chtel bych se zeptat, zda nekdo netusi, jak by se dalo pri pouziti fce LOAD DATA IN FILE udelat to abych ve zdrojovem CSV. souboru vybral jenom urcite sloupce? Diky za kazdou radu.. |
||
tiso Profil |
#2 · Zasláno: 18. 5. 2009, 14:46:23 · Upravil/a: tiso
gardener - nijak...
Môžeš vytvoriť tabuľku s rovnakým počtom stĺpcov ako má csv, a po importe zrušiť nepotrebné stĺpce, takže zostanú len tie čo potrebuješ... Druhá možnosť je load do temp tabuľky a následné skopírovanie len toho čo potrebuješ do cieľovej tabuľky. |
||
http Profil |
#3 · Zasláno: 18. 5. 2009, 14:52:27 · Upravil/a: http
a co udělat regularni výraz na ty středníky?
např: pole1;pole2;pole3;pole4 pole1;pole2;pole3;pole4 pole1;pole2;pole3;pole4 pole1;pole2;pole3;pole4 postup cyklus fread -> reg. výraz "na najdi obsah od druhého ; do třetího ;" -> načti do proměnné -> nový řádek -> end takhle bych si to asi logicky představoval, ovšem za předpokladu že víš jaký sloupec načíst... a taky jestli ti tu někdo napíše na tohle reg výraz, což by neměl být problém |
||
TomášK Profil |
#4 · Zasláno: 18. 5. 2009, 15:00:48
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3); |
||
gardener Profil |
#5 · Zasláno: 18. 5. 2009, 17:46:31
Díky za info, zkusím regulár a nebo popřípadě do tempu a pak smažu nepotřebné sloupce..
TomášK „123 LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);“ To znamená, že bych mohl přímo určit jaký sloupec ze zdroje nahrát? To jsem hledam v MySQL manuálu ale nikde jsem to tam nenašel.. |
||
TomášK Profil |
#6 · Zasláno: 18. 5. 2009, 18:26:40 · Upravil/a: TomášK
gardener
Přesně tak. Uvedený dotaz nahraje do tabulky t1 se sloupci column1, column2, column3 data z prvního, třetího a pátého sloupce CSV souboru. Zkopíroval jsem to přímo z dokumentace, http://dev.mysql.com/doc/refman/5.1/en/load-data.html. Lze i data upravovat předtím, než je vložíš, je to popsané o kousek vedle v té dokumentaci (hodí se to třeba na přeformátování datumů). |
||
gardener Profil |
#7 · Zasláno: 19. 5. 2009, 01:15:35
TomášK>
Tak jsem vyzkoušel nahrávvání pomocí výčtu sloupců v CSV ale bohužel mi to nefunguje 1)Zkoušel jsem jednak odstranit dolni vyjmenovane sloupce tabulky, tj.(jmeno,prijmeni,mobil) 2)Použít ENCLOSED BY '\" ' Ale nic z toho nepomohlo..tak si říkám, jestli na to nemůže mít vliv diakritika(velikost písmen asi ne..MySQL je nastaveno na CI) ukázková dta vypadají takto: "Jméno","Příjmení","Zaměstaní","Mobilní tel" "Martin ","Šťastný","Kosmonaut",854962158 a kód starající se o upload do DB vypadá takto: $soubor = mysql_real_escape_string(dirname(__FILE__) . '\\' . $soubor_nazev); $vlozeni = mysql_unbuffered_query ("LOAD DATA INFILE '".$soubor."' INTO TABLE kontakty (jmeno, @Jméno, prijmeni, @Příjmení, mobil, @Mobilní tel) FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' (jmeno,prijmeni,mobil) ;"); Netuší někdo, kde by mohl být problém? Nebo co dělám špatně? Díky za každou radu.. |
||
crook Profil * |
Hmm ja ted delam vyber a srovnani casti nazvu jobu avse delam pres retezce. Nactu do retezce, s tim podelam co chci, vyhodim vysledek. Nechces to taky nejak vzit pres retezce?
|
||
gardener Profil |
#9 · Zasláno: 19. 5. 2009, 11:06:36
crook Přesně ti asi nerozumím..myslíš řetězec načíst a třeba pomocí explode ho rozdělit do pole a to pak foreachem procházet?
|
||
AM_ Profil |
#10 · Zasláno: 19. 5. 2009, 11:36:18
gardener
To se nedivím, že to nefunguje, když vidím diakritiku v dotazu (ikdyž názvech dummy sloupců, ale stejně), jde mi mráz po zádech. |
||
crook Profil * |
#11 · Zasláno: 19. 5. 2009, 12:54:01
to gardener: Presne tak a muzes si to nacist jak se ti to hodit. napr to tvoje: Ten prvni radek predpokladam nepotrebujes pac ho mas v tabulce.
if($_FILES['cesta']['type']=="application/octet-stream"){ // Pokud soubor bude mít kocovku .php, upload se neprovede a vypíše hlášku echo "Soubory s příponou PHP jsou zakázány!"; // Která je zde } if($_FILES['cesta']['type']== "" ){ ?><h2 class="error">You dont select file</h2><? } else{ $fd = fopen ($nazev_souboru, "r"); while (!feof ($fd)) { ++$p; if( p!= '1'){ //vynechavam prvni radek $radek = fgets($fd, 4096); $slovo_all = explode(";",$radek); //vemu si jen martina a telefon z radky "Martin ","Šťastný","Kosmonaut",854962158 $jmeno = $slovo_all|[0]; $tel = $slovo_all|[4]; $vysledky[] = $jmeno.",".$tel; // ted mas uz jen pole co potrebujes takze: [0] => prvnijmeno,cislo,[1] => druhejmeno,cislo } } Pak uz si to opet muzes zpracovat forechem nebo si rovnou ten retezec sestavis tak aby jsi jen hodil vysledek, nebo si to explodem zas rozdelis..tvorivosti se meze nekladou |
||
crook Profil * |
#12 · Zasláno: 19. 5. 2009, 12:56:17
Omlouvam se jeste by po nacteni melo prijit fclose ($fd);//uklid:)
|
||
crook Profil * |
#13 · Zasláno: 19. 5. 2009, 12:57:34
to AM_...muzes mi rict kde by to melo mit problemy s diakritikopu? s tou se vubec nepracuje pokud mas zpravne kodovani v mysql
|
||
tiso Profil |
#14 · Zasláno: 19. 5. 2009, 13:04:55
TomášK - tak toto som nepoznal
crook ??? |
||
AM_ Profil |
#15 · Zasláno: 19. 5. 2009, 13:10:33
Problém s diakritikou bych hledal tady: "LOAD DATA INFILE '".$soubor."' INTO TABLE kontakty
(jmeno, @Jméno, prijmeni, @Příjmení, mobil, @Mobilní tel) Nejsem si 100% jistý, že je to zdroj problému, ale každopádně tam není jediný důvod ji používat a imho to nemusí být platný název sloupce, ikdyž dummy. Každopádně je to řekněme jednodušší řešení než to parsovat přes explode, škoda se ho hned vzdát když to hned napoprvé nejede... |
||
crook Profil * |
#16 · Zasláno: 19. 5. 2009, 13:23:24
tiso se pta:???
odpoved: ???????? -> to je na ten kod ci na neco jineho? Neco nelibi nefunguje ci co? AM_ aha..no ja ten prvni radek predpokladal jako vynechavku..prece uz v tabulce ma nazvy sloupcu ne?..jinak mas pravdu..pokud to myslel jako nazvy sloupcu tak je to volovina..minimalnebych odstrnil tu diakritiku a osobne ani mezery v nazvech nepokladam za spravne. Kdyz uz tak tu mame "_"...no musim se radne podivat na LOAD DATA FILE..ja to jeste nepouzil..Nemam rad prime nacitani dat bez toho abych nekde videl mezivysledek ktery potvrdim. |
||
tiso Profil |
#17 · Zasláno: 19. 5. 2009, 13:25:07
crook - to je otázka: čo za somariny to píšeš?
|
||
AM_ Profil |
#18 · Zasláno: 19. 5. 2009, 13:27:12
„Nemam rad prime nacitani dat bez toho abych nekde videl mezivysledek ktery potvrdim.“
Pokud máš sloupce v databázi správně nastavené (typ sloupce, maximální délka atd.), není důvod to neimportovat přímo; obzvlášť pokud to slouží např jen k zálohování nebo přenosu z db do db a neočekáváš, že tam někdo bude připisovat nějaké blbosti, je to každopádně nejrychlejší řešení, protože se vyhneš tahání a parsování PHP skriptem |
||
crook Profil * |
#19 · Zasláno: 19. 5. 2009, 13:44:04
tiso: konketne by to neslo..ja poradne tvorim web tak rok az dva a rad se necham poucit, ale to co jsem napsal za kod je tezko somarina, kdyz to pouzivam a zrovna ted na podobne veci delam a bez problemu to funguje
|
||
tiso Profil |
#20 · Zasláno: 19. 5. 2009, 13:50:07
crook - si si istý?
$slovo_all = explode(";",$radek); //vemu si jen martina a telefon z radky "Martin ","Šťastný","Kosmonaut",854962158 |
||
AM_ Profil |
#21 · Zasláno: 19. 5. 2009, 13:56:37
crook
„$jmeno = $slovo_all|[0];“ Co tam dělá ten znak | před tím indexem? není to hloupost $slovo_all | [0] ? (| je bitové OR, ne?) |
||
crook Profil * |
#22 · Zasláno: 19. 5. 2009, 14:06:18
to tiso: Pardon bylo to vytazene z jineho prevodu a nevsim sem si ze ma jine csv..psal jsem to v rychlosti
ten znak vubec netusim..bylo to vytazene a u me ten znak neni, a stalo se to i druheho |
||
crook Profil * |
#23 · Zasláno: 19. 5. 2009, 14:10:16
to tiso: Pokud si vsimnes tak http psal o strednicich, proto jsem si toho ani nevsimal. On konkretne neuvedl csv jen ze je to csv a tam ja standartne pouzivam stredniky(verze v Excelu). To uz vic beru chybu to co napsal AM_ nez takovou blbost. A pokud sis jeste nevsim tak tam pridalc "" coz je pro me jen vypis hodnot a ne to co ma v CSV
|
||
gardener Profil |
#24 · Zasláno: 19. 5. 2009, 16:20:56 · Upravil/a: gardener
Pravda, dikritiku z nadpisu sloupcu mohu odstranit před vložením..myslím si, že pokud je to app. pro osobní použití, tak bych si s parsováním dat přidělával zbytečně práci..dříve jsem používal jenom LOAD DATA INFILE, a byl jsem spokojen, ale teď se změnila struktura generovaného CSV a je v něm spousta sloupců, co prostě vkládat nepotřebuji..
Nicméně jsem příkaz upravil takto a zjistil jsem, že to funguje téměř jako klasický LDINF resp. sloupce Jmeno,Prijmeni se vloží..Mobil nikoliv..netuším ale tedy proč..a v diakritice to teď být nemůže, jelikož ji odstraňuji. $soubor = mysql_real_escape_string(dirname(__FILE__) . '\\' . $soubor_nazev); //echo($soubor); Is here because i needed known absolute path for imported file //INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);“ $vlozeni = mysql_unbuffered_query ("LOAD DATA INFILE '".$soubor."' INTO TABLE kontakty FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' (jmeno, @Jmeno, prijmeni, @Prijmeni, mobil, @Mobil) ;"); EDIT: Všiml jsem si, že SCALC mi sloupec mobil v CSV ukládá bez uvozovek tzn. takto: "Jmeno","Prijmeni","Zamestnani","Mobil" "Martin ","Šťastný","Kosmonaut",123456789 "Martin ","Šťastný","Kosmonaut",111222444 Ale ani pokud je tam doplním přímo, tak vkládání nefunguje.. |
||
Časová prodleva: 15 let
|
0