Tema: Re: Q: [f|s]printf problemos
Autorius: Laimis
Data: 2011-01-15 17:13:34
ejs rašė:
>
> Laba,
>
> kaip sprendžiate 'decimal separator' problemytę?
>
> Išvedinėju duomenis į CSV ir juos nuskaitinėju su OpenOffice Calc'u
> grafikų braižymui. Kadangi fprintf naudoja "." trupmeninei daliai
> atskirti, o OOo Calc'as 'decimal separator' ima pagal lokalės nuostatas,
> jis ten tikisi pamatyti ",".
> Ar įmanoma paprastu būdu fprintf'ui nurodyti kaip atskirti trupmeninę dalį?
>
> Duomenis išvedinėja MatLAB R2010a, kaip jį priversti naudoti lokalės
> nuostatas, dar neradau.
> O paprasto būdo sumaitinti duomenis į OOo Calc'ą irgi nėra. Yra
> 'xlswrite', bet reikia turėti suinstaliuotą MSO.

Pirmas įspūdis, kad Matlab'e taškas „įsiūtas“, tačiau galima išspręsti 
bent jau trejopai:

1) matlab'e:
str = sprintf('%f', x)
str = strrep(str, '.', ',');
fprintf(fout, '%s...', str, ...);

2) sed, awk (priklausomai nuo to ar galima tiesmukiškai keisti visus 
stulpelius, t.y. ar nėra tekstinių/datos stulpelių, kuriuose galėtų būti 
taškai/kableliai):
sed -i.orig -e 's/\./\,/g' file.csv

3) OO Calc importuojant CSV turbūt galima pasirinkti kalbą ir pažymėti 
„detect special numbers“. Neturiu po ranka ir negaliu patikrinti, tačiau 
nustatčius atitinkamą kalbą, turėtų traktuoti taškus, kaip decimal 
separatorius, o po importo, lape, pagal logiką, turėtų gautis kableliai 
(pagal OO/sistemos lokalės nuostatas).