Tema: Re: Q: [f|s]printf problemos
Autorius: ejs
Data: 2011-01-15 22:56:50
2011.01.15 17:13, Laimis rašė:

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

na taip.


Numeric Format Uses C Locale

MATLAB software reads the user locale for all categories except for the 
LC_NUMERIC category. This category controls numeric data formatting and 
parsing. MATLAB always sets LC_NUMERIC to the C locale.

For example, some users expect a comma in a number while other users 
expect a decimal. The value of pi can be displayed as 3.1415 or 3,1415, 
depending on the format used by a locale. MATLAB always uses 3.1415, 
regardless of the format specified by the user locale.

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

vėl hardcod'inimas, tik į kitą pusę. Ir nematau MatLAB'e galimybės gauti 
lokalės nustatymus perdaug neprogramuojant.

> 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

taškų yra. Ten pat keliauja ir failo pavadinimas. Duomenų bloko pvz:

  Image file:	 boat.tif
  Number of annotations:	 3
  Compression ratio 	 PSNR 	 IW-SSIM 	 MS-SIM
25:1	30.97080640	0.95892116	0.82229477	
50:1	28.08768011	0.91135464	0.73522102	
100:1	25.98833437	0.83791356	0.66173827	
150:1	24.75599627	0.78497023	0.61283422	
200:1	24.07390819	0.74987019	0.58906882	

> 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).

tas kažkiek veikia (bent jau RC7), bet bevelyčiau atspausti duomenis 
taip, kad nereiktų jokių šamanizmų juos toliau naudojant.
  Kitas variantas - pasirašyti 'odswrite' ;)

-- 
ejs