Import CSV do databáze.
Zdravím,
mám problém s importem do databáze CSV souboru.
Mám vytvořený správně sloupce ale při importu přes phpadmin mi to píše Chybný počet polí v CSV datech na řádku 1.
CSV soubor je vytvořený v mp3 tagu, přikládám ho pro kontrolu. Snad mi někdo řekne co je špatně.
V databázi mám vytvořený tyto sloupce:
1 Title
2 Artist
3 Album
4 Track
5 Year
6 Length
7 Autor
8 Filename
Vymaž ty středníky na koncích řádků.
Vymazáno ale při importu zase stejný problém.
Ako nevadí Ti, že tých polí tam máš 9 ? Hneď druhý riadok, keď rátam teda aj hlavičku... Si ich zrátaj tie polia oddelené bodkočiarkou...
Nevím ale jak počítám jak počítám vidím 8 polí což mám i vytvořené.
Jambalaya; ===Title
George Jones; ===Artist
Country & Western Favourites, Vol. 1;===Album
1; ===Track
1992; ===Year
106; ===Length
Williams; ====Autor
01 - Jambalaya.mp3 ===Filename
Myslel jsem že je možná chyba zde Country & Western Favourites, Vol. 1; ta čárka za Favourites ale po smazání problém stejný.
Myslel som si aj ja... A čo Coutry & Western ? Skús aj toto "&" zmazať...
Tak ani to to nevyřešilo, a navíc kdyby to byl ten problém s & tak by to bylo k ničemu, protože je to součást názvu alba.
Teď už nevím kde by mohl být problém tedy.
A ako vyzerá tabuľka v databáze? Stĺpce sú všetky rovnaké? String/text/číslo? Alebo?
1 Title varchar(255) utf8_general_ci
2 Artist varchar(255) utf8_general_ci
3 Album longtext utf8_general_ci
4 Track varchar(255) utf8_general_ci
5 Year varchar(255) utf8_general_ci
6 Length varchar(255) utf8_general_ci
7 Autor varchar(255) utf8_general_ci
8 Filename varchar(255) utf8_general_ci
S jakými parametry ten import provádíš?
Nevím jestli je tím myšleno toto, viz screen.
Pole oddělené: dej tam ;
Tak už jsem se díky tomuto dostal že to zapíše ten první řádek:
Title Artist Album Track Year Length Autor Filename
Ale teď to háže zase problém s těmi poli na řádku 2.
:D
A umazal jsi ty středníky na konci?
Ano, přikládám upravený CSV pro kontrolu.
Tak ještě zkus obsah těch jednotlivých polí dát do uvozovek.
Jednoduché uvozovky?
Udělal jsem to a píše mi to už zase tu chybu na prvním řádku.
Nemůže být problém v těch mezerech v tom textu?
Dvojité.
to jsem také udělal a zmíněná chyba na první řádku.
Zkusím ještě místo těch středníků dát všude čárku.
Musíš to mít tak, jak to máš nastavené při importu.
jj to vím, nechal jsem při importu , a všude přepsal středníky a stále ta chyba na řádku 2, ten první to zapíše ten druhý už ne. Nevím co už tomu může vadit.
A máš to teď ve dvojitých uvozovkách nebo ne?
Když je to v uovozovkách vše
Tak už to háže chybu na řádku 1
PS: Díky za vaší trpělivost
Ještě by mohl být problém v tom, že importuješ soubor v Unicode kódování, ale máš nastavené UTF-8.
Tak tohle by mě nenapadlo, kod který tvoří v tom mp3tagu ten soubor CSV je nastaven na kodování utf-16
Celý kod je :
Když jsem tedy změnil při importu UTF-8 na UTF-16 tak je to OK a zapsalo se vše správně.
Děkuji ti moc, hodně si mi pomohl.
"Ale teď to háže zase problém s těmi poli na řádku 2."
To napíše len problém a číslo riadku? Kde je problém v riadku na ktorom znaku nepíše?
Chybný počet polí v CSV datech na řádku 2.
INSERT INTO `country`
VALUES (
'T\0i\0t\0l\0e\0', '\0A\0r\0t\0i\0s\0t\0', '\0A\0l\0b\0u\0m\0', '\0T\0r\0a\0c\0k\0', '\0Y\0e\0a\0r\0', '\0L\0e\0n\0g\0t\0h\0', '\0A\0u\0t\0o\0r\0', '\0F\0i\0l\0e\0n\0a\0m\0e\0'
)# Ovlivněn 1 řádek.
Doufám že nevadí že jsem to znovu otevřel.
Mám problém s tím zápisem.
Vytvořil jsem si formulář pro upload těch CSV do databáze vše funguje jak má až do doby kdy je v názvu písně čárka oddělující slovo. Pak to bere jako další sloupec což je chyba.
Existuje řešení aby jí to nebralo jako dlaší sloupec.
Už jen z toho důvodu že z mé sbírky asi 13000 skladeb obsahuje čárku v názvu skladby oddělující slovo asi 75% skladeb
Soubor který to posílá je zde:
Tak nemuzes to delat podle čárky žejo ;) Musíš to dělat podle regulerního výrazu který to dělí na uvozovky, něco, uvozovky, čárka + bere v potaz esape sekvenci pro uvozovky..
Tak jsem asi lama ale to co si napsal jsem vůbec nepochopil :D
Znamená to snad každou skladbu přepsat?
Jen se ti snažil sdělit, že čárka jako oddělovač polí funguje pouze v případě, že čárka není uvnitř uvozovek. Pokud je uvnitř uvozovek, tak je součástí pole. To se dá řešit několika způsoby a naznačil ti, že dobře by se to řešilo pomocí regulárních výrazů.
Už jsem to pochopil, takže chyba je v tom že to není v uvozovkách :D
ne chyba je v tom, ze to delis na zakladne carky, coz je spatny algoritmus, mas to delit minimaln na zaklade carky, která neni uzavrena v uvozovkách a i to je spatny algoritmus, presto podle mne zafunguje na vetisnu radku.
Co mám tedy upravit, soubor CSV nebo kod který to zpracovává a odesílá?
Jsem z toho teď tak trochu celej vedle sebe.
Kód.
Ten soubor co to zpracovává $cells = explode(",",$line); to rozhazuje do pole podle čárky, což je špatně. Ja mysql rozumím jako lidi v hospodě ekonomice. Ale napsat se to dá ruznejma zpusobama, například rozhození do pole podle regularního vyrazu umi funkce http://www.php.net/manual/en/function.preg-split.p hp - což technicky vzato je vymeneni pouze volani teto funkce.
Ale bych zkusil mozna jen toto : explode("\",\"",$line), přidat tam \"
\" - pokud to v PHP udelat to co si myslim ze to udela a to co to udela v kazdem normalnim jazyku
Pokud tam dám toto explode("\",\"",$line)tak upload nefunguje, ikdyž to napíše Konec ForEach
Nahráno: 81 řádků tak ale do databáze se nic nenahraje
Vyřešeno tak že vytváření toho CSV jsem upravil aby to dělal místo čárek ; a v kodu jsem to upravil takto $cells = explode(";",$line);
no ale ted ti to nepujde pokud to bude osahovat strednik. To jsi mohl rovnou udelat "sloupecA"@,@"SloupecB" a $cells = explode("@,@",$line); Tohle ale zase nezafunguje pokud text bude obsahovat tuhle @,@ kombinaci znaku.
Tak v 13000 alb nemám středník tak mám snad vyhráno :D
13000 myslel jsem ze Powerwolf má 4 CD, Skyfire také, Wintersun 1, Norhland 1 Crimfall 2, tzn. 12 alb, všechny ostatní alba jsou zbytečná
každý máme to své :) a spletl jsem se bylo myšleno skladeb ;§