abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 1
včera 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 26
včera 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 7
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 14
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 25
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 15
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 5
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 1
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 774 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: format CSV - zalomene radky uvnitr poli?

20.7.2011 16:05 PepeONaChair | skóre: 4
format CSV - zalomene radky uvnitr poli?
Přečteno: 726×
Příloha:
Zdravim,

firma, ktera nam ma zasilat data ve formatu CSV se me snazi presvedcovat, ze kdyz pole na radku obsahuje zalomeni radku, tak je v poradku, ze se takovy zaznam (radek) v CSV take zalomi. Takze pak je jeden zaznam na vice radku, podle toho, kolik "enteru" je v poli.

Je to skutecne normalni? Oni se ohani RFC 4180. Jestli je to normalni, tak prosim poradte, jak spolehlive vypsat jen to predposledni pole. Tj. to, co obsahuje to ovoce se zalomenymi radky.

Do prilohy davam printscreen prikladu jednoho radku.

Diky, uff. Pep.

Odpovědi

20.7.2011 16:16 PepeONaChair | skóre: 4
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Jeste dodam, ze to resim v BASH skriptu. Pep.
20.7.2011 16:18 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
A mají pravdu, v RFC 4180 se to tak píše a navíc se to tak dělá (jak jinak by jste to zapsal). Jinak „měly“ by tám být " ne '.
Ćíst to můžete více způsoby, ale pokud chcete univerzální schopný pracovat s libovolným objemem dat a rychle, tak je to nelepší po znaku a rekonstruovat záznamy postupně (a mít jako parametr oddělovač, textový oddělovač, a znakovou sadu) - a přijde na to v jakém jazyku.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
20.7.2011 16:30 PepeONaChair | skóre: 4
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Pak mam problem, jak od sebe odlisit jednotlive zaznamy?. Chtel jsem to zpracovavat GREPemem atd., jenze predtim musim zrusit/nahradit prave ta zalomeni radku uvnitr pole. Nevedel byste priklad napr. prikazu sed se spravnym reg. vyrazem pro vyhledani/nahrazeni jen ten zalomenych radku uvnitr pole?
20.7.2011 16:37 Miklik | skóre: 27 | Krnov
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Je třeba vědět, kolik záznamu má jeden řádek a takto to v cyklu čist od oddělovače k oddělovači. V bash, ale netuším, jestli je tam něco co umí číst soubor po znacích. Možná by si s tím mohlo poradit awk.
Netvrdím to, ale možná je to pravda.
20.7.2011 17:05 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
PS: není to třeba vědět, nebo respektive při prvním si to zjistíte, nicméně, jestli se nepletu, není zaručeno, že každý záznam/řádek ma totožný počet sloupců (i když to tak je :-)).
Musíte prostě vědět jestli crlf nebo (nebo lf nebo cr :-) ) je mezi uzavíračem textu " nebo ne.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
21.7.2011 13:50 marek
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Dobry den.

Pred lety jsem delal v Bash prototyp streamoveho filtru.

Pak jsem to prepsal s jinou filosofii v C.

Nicmene vyvoj sel velmi rychle (stale jsem odchytaval dalsi a dalsi zverstva v tom streamu).

Myslim ze by to slo snadno priohnout.

Je to ale dost pomale....

Marek
#!/bin/bash
export IFS=""
ramecky=0
while read -rsn1 char
do

        if [ $ramecky -eq 1 ]
        then
                case "$char" in
                $'\033')
                        read -rsn1 char1
                        if [ "$char1" =  '[' ]
                        then
                                read -rsn1 char2
                                if [ "$char2" = '1' ]
                                then
                                        read -rsn1 char3
                                        if [ "$char3" = '0' ]
                                        then
                                                read -rsn1 char4
                                                if [ "$char4" = 'm' ]
                                                then
                                                        #rozpoznana escape sequence na zapnuti ramecku
                                                        ramecky=0
                                                        echo -en "\\033[0;39m"

                                                else
                                                        echo -n "$char$char1$char2$char3$char4"
                                                fi
                                        else
                                                echo -n "$char$char1$char2$char3"
                                        fi
                                else
                                        echo -n "$char$char1$char2"
                                fi
                        else
                                 echo -n "$char$char1"
                        fi
                        ;;
                D)
                        echo -n '-'
                        ;;
                Z)
                        echo -n ','
                        ;;
                '?')
                        echo -n '.'
                        ;;
                '@')
                        echo -n '`'
                        ;;
                'Y')
                        echo -n "'"
                        ;;
                '3')
                        echo -n '|'
                        ;;
                '')
                        echo
                        ;;
                *)
                        echo -n "$char"
                esac
        else
                case "$char" in
                $'\033')
                        read -rsn1 char1
                        case "$char1" in
                        "d")
                                read -rsn1 char2
                                if [ "$char2" = '#' ]
                                then
                                        #tady probiha tisk

                                        read -rsn1 char3
                                        ( while [ ! "$char3" = $'\024' ]
                                        do
                                                [ "$char" ] || echo
                                                echo -n "$char3"
                                                read -rsn1 char3
                                        done ) | /usr/local/sbin/print1
                                else
                                        echo -n "$char$char1$char2"
                                fi
                                ;;
                        '[')
                                read -rsn1 char2
                                case "$char2" in
                                1)
                                        read -rsn1 char3
                                        if [ "$char3" = '2' ]
                                        then
                                                read -rsn1 char4
                                                if [ "$char4" = 'm' ]
                                                then
                                                        #rozpoznana escape sequence na zapnuti ramecku
                                                        ramecky=1
                                                        echo -en "\\033[1;43m"
                                                else
                                                        echo -n "$char$char1$char2$char3$char4"
                                                fi
                                        else
                                                echo -n "$char$char1$char2$char3"
                                        fi
                                        ;;
                                5)
                                        read -rsn1 char3
                                        if [ "$char3" = ';' ]
                                        then
                                                read -rsn1 char4
                                                if [ "$char4" = '1' ]
                                                then

                                                        read -rsn1 char5
                                                        if [ "$char5" = 'i' ]
                                                        then
                                                                #rozpoznany zacatek tisku
                                                                konec=0
                                                                ( while [ "$konec" -eq 0 ]
                                                                do
                                                                        read -rsn1 char6
                                                                        if [ "$char6" = $'\033' ]
                                                                        then
                                                                                read -rsn1 char7
                                                                                if [ "$char7" = '[' ]
                                                                                then
                                                                                        read -rsn1 char8
                                                                                        if [ "$char8" = '4' ]
                                                                                        then
                                                                                                read -rsn1 char9
                                                                                                if [ "$char9" = 'i' ]
                                                                                                then
                                                                                                        konec=1
                                                                                                else
                                                                                                        echo -n "$char6$char7$char8$char9"
                                                                                                fi
                                                                                        else
                                                                                                echo -n "$char6$char7$char8"
                                                                                        fi
                                                                                else
                                                                                        echo -n "$char6$char7"
                                                                                fi
                                                                        else
                                                                                [ "$char6" ] || echo
                                                                                echo -n "$char6"
                                                                        fi
                                                                done ) | /usr/local/sbin/print1
                                                        else
                                                                echo -n "$char$char1$char2$char3$char4$char5"
                                                        fi
                                                else
                                                        echo -n "$char$char1$char2$char3$char4"
                                                fi
                                        else
                                                echo -n "$char$char1$char2$char3"
                                        fi
                                        ;;
                                *)
                                        echo -n "$char$char1$char2"
                                esac
                                ;;

                        *)
                                 echo -n "$char$char1"
                        esac
                        ;;
                $'\221')
                        echo -en "\\033[1;43m \\033[0;39m"
                        ;;
                $'\237')
                        echo -en "\\033[1;42m \\033[0;39m"
                        ;;
                $'\233')
                        echo -n "-"
                        ;;
                $'\232')
                        echo -n "|"
                        ;;

                '')
                        echo
                        ;;
                *)
                        echo -n "$char"
                esac
        fi
done

21.7.2011 18:53 Kit
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Obávám se, že BASH vůbec není určen pro znakové parsování řetězců. Když už, tak regulárním výrazem. Vůbec se nedivím, že je to pomalé. Ten program v C by mohl být mnohem zajímavější.
22.7.2011 10:40 marek
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Dobry den.

No ono to s tou pomalosti zas tak strasne neni.

Fungovalo to jako obalka pro telnet+xterm a nez ten telnet to i na starodavnych pleckach, na ktere to bylo urceno, bylo rychlejsi.

Pomalost se projevovala pouze pri tisku velkych souboru.

Marek
22.7.2011 10:43 marek
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?

Jo a nesmelo to bufferovat, takze se muselo parsovat opravdu znakove.

20.7.2011 16:59 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
No a je tam CRLF ("\r\n") nebo jen LF ("\n")?, z toho obrázku to není moc jasné :-)
Hm, spíš asi awk.
Je to bohužel obecná „kravina“ CSV a třeba i v fce v PHP (lze na to narazit i jinde) s tím nepočítají.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
20.7.2011 17:27 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Něco jsem napsal a nevím co:
 sed ':a;N;$!ba;s/\("[^"]*\)\n\([^"]*"\)/\1Shit_new_line\2/g' kuk.csv
funguje to na , a " a LF na ' jsem neměl nervy to zapisovat do $quot; a escapovat,
na CRLF je třeba ipravit:
 sed ':a;N;$!ba;s/\("[^"]*\)\r\n\([^"]*"\)/\1Shit_new_line\2/g' kuk.csv
Což by mohl být základ „workaround-u“ co chcete…

PS: samozřejmě Shit_new_line musí být unikátní v souboru se nevyskytující řetězec.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
20.7.2011 17:32 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
s/$quot;/\" , nebo-li $quot; mělo být " :-(
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
20.7.2011 23:50 Semo | skóre: 44 | blog: Semo
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
BTW to RFC aj specifikuje, ze znak " moze byt aj vnutri pola a potom sa zapisuje zdvojene (a navyse toto pole musi byt obalene ""). Takze pole """" je v skutocnosti jeden znak ".

Som skoro maniak do Bashu a mam v tom napisanych velke desiatky skriptov na vsemozne veci, ale pisat si v nom vlastny parser na CSV je blbost.

Vybral by som si niektory z odkazovanych hotovych parserov na wikipedii v jazyku, ktory mi je blizky.
If you hold a Unix shell up to your ear, you can you hear the C.
21.7.2011 01:11 Kit
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Pokud to potřebuješ třeba jako vstup do MySQL, tak se to dá přímo načíst:
load data local infile 'pokus.csv' into table adresa
   fields terminated by ','
   enclosed by '"'
   lines terminated by '\n'
   (jmeno,cislo,ulice);
Vyzkoušel jsem s podobnými vstupy, funguje to. Včetně diakritiky.

OpenOffice Calc to načte také.
21.7.2011 12:28 PepeONaChair | skóre: 4
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Ahoj,

diky za vsechny reakce, je jich hodne a tipy, takze ted je budu vsechny zkouset. Jeste jednou dik.

Pep.
xkucf03 avatar 22.7.2011 00:33 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
V tom RFC se ale píše, že pole obsahující konec řádku mají být v "uvozovkách" (oni mají 'apostrofy'). Takže oni by si to měli opravit a ty potřebuješ lepší parser. A jinak bych to asi předělal do XML…
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
xkucf03 avatar 22.7.2011 00:40 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše XML
viz csv2xml – to zalomené řádky zvládá :-)
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
22.7.2011 07:50 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
A jinak bych to asi předělal do XML
A v čem to bude lepší?
22.7.2011 08:17 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Můžeš na to použít nejhorší programovací jazyk v dějinách – XSLT. A to se vyplatí!
Ještě na tom nejsem tak špatně, abych četl Viewegha.
xkucf03 avatar 22.7.2011 10:23 xkucf03 | skóre: 45 | blog: xkucf03
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
Nebudou se muset hádat, jestli je formát správně podle RFC nebo podle nějakého nepsaného standardu, nebudou mít problém s konci řádků, diakritikou atd. Můžeš to předat rourou třeba příkazu xsltproc – to mi přijde rozumnější, než psát několikastránkové skripty v bashi. Nebo ty data naládovat do relační databáze a pak s tím pracovat už hezky v SQL :-)
Mám rád, když se lidé přou, znamená to, že vědí, co dělají, a že mají směr. Frantovo.cz, SQL-Výuka.cz, Nekuřák.net
22.7.2011 21:51 Radek Miček | skóre: 23 | blog: radekm_blog
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?

CSV lze specifikovat velmi jednoduše (RFC je výjimka, jenž potvrzuje pravidlo), což se o XML říct nedá.

<rejp>Napsat CSV parser dá zhruba stejně práce jako napsat hlavičku a patičku XSLT skriptu.</rejp>

22.7.2011 23:40 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: format CSV - zalomene radky uvnitr poli?
CSV lze specifikovat velmi jednoduše
Což bohužel znamená, že si CSV naspecifikuje každý znova a trochu jinak. Takže napsat obecný automatický parser CSV nakonec nejde, vždycky musí uživatel ze vzorku okem odhadnout, co asi budou jaké oddělovače atd.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.