[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!