[vastaus aiempaan viestiin]
Kirjoittaja: | Kimmo Vehkalahti |
---|---|
Sähköposti: | - |
Päiväys: | 24.11.2006 12:30 |
Alkuperäisen kysymyksen "Miten ison csv-filen pystyy konvertoimaan survotiedostoksi ?" voi tulkita kahdella tavalla: 1) kuinka suuren, 2) miten toimia. Kohtaan 1) Pentti jo vastasikin - rajoituksia ei käytännössä ole (muuta kuin Survo Editor -ilmaisversiossa). Kohdan 2) osalta haluaisin hieman tarkentaa Pentin pikavastausta. CSV ("comma-separated values") on siis yksi tiedon talletusmuoto, ks. http://en.wikipedia.org/wiki/Comma-separated_values CSV-tiedoston ilmiasuun vaikuttavat Windowsin maa-asetukset kohdassa Start - Settings - Control Panel - Regional and Language Options - Regional Options - Customize - Numbers Kyseisessä lomakkeessa on kaksi kohtaa, joilla on tässä merkitystä: - Decimal symbol - List separator Oletuksena suomalaisissa asetuksissa on pilkku (,) ja puolipiste (;). Koska pilkku on mielestäni onneton desimaalierotin, olen vaihtanut sen pisteeksi (.) omassa Windowsissani. Tällöin myös mm. SPSS:n ja Office-ohjelmien käyttö on kätevämpää Survon rinnalla, koska Survon desimaalierotin on piste riippumatta Windowsin maa-asetuksista. ................................................................. Esimerkki: talletetaan Excelistä pieni taulukko CSV-muodossa ja luetaan se Survon datatiedostoksi: SHOW A10A.CSV / erottimena puolipiste; tiedosto näyttää tältä: Country ;Country3;Contint ;Surface ;Pop99 ;Mobile97;PC97 Afghanistan ;AFG;5;652090;21.9;; Albania ;ALB;1;28748;3.1;3300; Algeria ;DZA;4;2381741;30.8;15000;0.4 American Samoa ;ASM;6;199;0.1;; Andorra ;AND;1;468;0.1;9500; Angola ;AGO;4;1246700;12.5;7100;0.1 Antigua and Barbuda ;ATG;3;442;0.1;1300; Argentina ;ARG;3;2780400;36.6;2012500;3.9 Armenia ;ARM;5;29800;3.5;300; Australia ;AUS;6;7741220;18.7;4893000;36.2 Tiedosto on näkyvillä tässä vain havainnollisuuden vuoksi. Aineisto saadaan Survo-muotoon suoraan tiedostosta komennolla FILE SAVE A10A.CSV TO NEW A10A / DELIMITER=; .......................... FILE STATUS A10A / näin syntyneen Survo-tiedoston rakenne... Copied from text file A10A.CSV FIELDS: (active) 1 SA_ 24 Country 2 SA_ 3 Country3 3 NA_ 1 Contint (########) 4 NA_ 8 Surface (########) 5 NA_ 4 Pop99 (######.#) 6 NA_ 8 Mobile97 (########) 7 NA_ 4 PC97 (######.#) END Survo data file A10A: record=85 bytes, M1=12 L=64 M=7 N=10 FILE LOAD A10A CUR+2 / ...ja sisältöä: CASES=Country3:AR* CASES_WILD*=* DATA A10A*,A,B,C Country Cou Contint Surface Pop99 Mobile97 PC97 Argentina ARG 3 2780400 36.6 2012500 3.9 Armenia ARM 5 29800 3.5 300 - ........................................... Vastaavasti, kun listaerottimena on pilkku: SHOW A10B.CSV / SHOWLOAD=1,5 (otetaan 5 ensimmäistä riviä toimituskenttään) Country ,Country3,Contint ,Surface ,Pop99 ,Mobile97,PC97 Afghanistan ,AFG,5,652090,21.9,, Albania ,ALB,1,28748,3.1,3300, Algeria ,DZA,4,2381741,30.8,15000,0.4 American Samoa ,ASM,6,199,0.1,, FILE SAVE A10B.CSV TO NEW A10B / DELIMITER=, FILE SHOW A10B / datan selailu .............................. FILE LOAD -A10B CUR+2 / IND=ORDER,9,10 (viimeiset maat ilman otsikoita) Armenia ARM 5 29800 3.5 300 - Australia AUS 6 7741220 18.7 4893000 36.2 ............................... Joskus CSV-tiedostoissa esiintyy lainausmerkkejä ("") kenttien ympärillä (esim. useampisanaisissa merkkijonoissa). Useissa tapauksissa niistä ei ole muuta kuin haittaa. Ne voi poistaa joko FILE SAVE:n yhteydessä SKIP- täsmennyksellä tai ennen FILE SAVE:ä TXTCONV-komennolla. Esimerkiksi, jos tiedosto olisikin tällainen: SAVEP CUR+1,CUR+11,A10C.CSV / talletetaan toimituskentästä tekstitiedostoksi Country ;Country3;Contint ;Surface ;Pop99 ;Mobile97;PC97 "Afghanistan" ;AFG;5;652090;21.9;; "Albania" ;ALB;1;28748;3.1;3300; "Algeria" ;DZA;4;2381741;30.8;15000;0.4 "American Samoa" ;ASM;6;199;0.1;; "Andorra" ;AND;1;468;0.1;9500; "Angola" ;AGO;4;1246700;12.5;7100;0.1 "Antigua and Barbuda" ;ATG;3;442;0.1;1300; "Argentina" ;ARG;3;2780400;36.6;2012500;3.9 "Armenia" ;ARM;5;29800;3.5;300; "Australia" ;AUS;6;7741220;18.7;4893000;36.2 niin voitaisiin toimia seuraavasti: FILE SAVE A10C.CSV TO NEW A10C / DELIMITER=; SKIP=" Listataan data vielä kerran; nyt ilman rajariviä jolloin erottimet tulevat kenttien väliin (siirto siis toimii molempiin suuntiin): MASK=AAA--A- FILE LOAD A10C CUR+3 / SELECT=Eur+Aus Eur=Contint,1 Aus=Contint,6 DATA A10C*,D,F,G Country ;Cou; Contint;Mobile97 Albania ;ALB; 1; 3300 American Samoa ;ASM; 6; - Andorra ;AND; 1; 9500 Australia ;AUS; 6; 4893000 .................................................. Tässä esimerkissä Excel talletti CSV-tiedoston ihan oikein, mutta kuten Pentti mainitsi, Excelillä on välillä ongelmia mm. puuttuvien tietojen kanssa. Nämä ongelmat saa Survon puolella ratkaistua mm. ottamalla koko CSV-tiedoston toimituskenttään ja siistimällä sen kuntoon erilaisilla "kättä pidemmillä" työkaluilla (INSERT, DELETE, SET, COUNT, TRIM jne.) ja/tai tekemällä pieniä sukroja. Toisinaan on myös hyötyä FILE SAVE:n täsmennyksestä SKIP_ERRORS, jossa on pari erilaista vaihtoehtoa riippuen mitä kulloinkin halutaan tehdä. Itse olen suosinut TAB-delimited -tallennusmuotoa, mutta CSV toimii toki yhtä hyvin. terv. Kimmo
Vastaukset: |
---|
Survo-keskustelupalstan (2001-2013) viestit arkistoitiin aika ajoin sukrolla, joka automaattisesti rakensi viesteistä (yli 1600 kpl) HTML-muotoisen sivukokonaisuuden. Vuoden 2013 alusta Survo-keskustelua on jatkettu entistäkin aktiivisemmin osoitteessa forum.survo.fi. Tervetuloa mukaan!