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
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 ;§