Re: CSV-file survotiedostoksi

[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:
[ei vastauksia]

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!

Etusivu  |  Keskustelu
Copyright © Survo Systems 2001-2013. All rights reserved.
Updated 2013-06-15.