[+] C - zapis float/double do pliku przecinek zamiast kropki

Potrzebujesz pomocy z C, C++, perl, python, itp.
mlyczek
Junior Member
Posty: 979
Rejestracja: 02 sierpnia 2006, 19:17

Post autor: mlyczek »

No to jednym z wyjść (jedynym jakie teraz mi przychodzi do głowy i jakie znalazłem jak dotąd na google) jest takie, że przed wypisaniem tej liczby zmiennoprzecinkowej konwertujesz ją do łańcucha znaków (ja bym dał w c++ string, ale w c go niestety nie ma) i w tym łańcuchu znaków zmieniasz kropkę na przecinek (z tym już nie będzie problemu) i dopiero ten łańcuch wypisujesz do pliku.

Rozwiąznie trochę toporne, ale jak narazie jedyne, które udało mi się wymyślić i wyszperać.
slomek
Posty: 8
Rejestracja: 20 marca 2007, 23:13

Post autor: slomek »

No właśnie też tylko to mi przychodzi do głowy...
Problemy są trzy:
1. Zapisuję naraz TRZYNA¦CIE liczb zmiennoprzecinkowych- konwertowanie każdego mija się z celem
2. Program służy do rozpoznawania pieszych na sekwencjach filmu i chciałbym, żeby w miarę szybko działał (każda konwersja zabierze pare cykli procka:P)
3. To jest praca dyplomowa- wszelkie prowizorki niewskazane ;)
mlyczek
Junior Member
Posty: 979
Rejestracja: 02 sierpnia 2006, 19:17

Post autor: mlyczek »

Z tego co jeszcze szukałem to możesz pokombinować z locale. Tylko nie mam aktualnie dokumentacji gcc, więc musiałbyś poszukać w niej jak ustawić określone locale i później zgodnie z nim wypisywać. Bo przecinek jest używany w Polsce, a Anglosasi używają do tego celu kropki, więc zmiana locale na pl powinna pomóc, ale tak jak mówię, są to tylko moje przypszczenia, bo nie robiłem tego nigdy, a w dokumentacji nie moge sprawdzić.
ajur
Posty: 16
Rejestracja: 18 marca 2007, 17:17

Post autor: ajur »

jest coś takiego jak biblioteka locale, w której to można zmieniać ustawienia takie jak wyświetlanie daty, waluty czy właśnie znaku znaku między częścią całkowitą a ułamkową w liczbach rzeczywistych. Plik nagłówkowy to locale.h, nie powiem ci jak i co tam zmienić, bo sam nie wiem:P, ale np. tu:
http://www.chemie.fu-berlin.de/chemnet/ ... bc_19.html
możesz o tym poczytać. aha, proponuję najpierw napisać sobie mały programik, sprawdzający twoje aktualne ustawienia locale. Może w systemie masz jakieś śmieszne ustawienia czegoś, albo w kompilatorze?
mlyczek
Junior Member
Posty: 979
Rejestracja: 02 sierpnia 2006, 19:17

Post autor: mlyczek »

ajur pisze:Może w systemie masz jakieś śmieszne ustawienia czegoś, albo w kompilatorze?
Raczej nie ma nic śmiesznego, bo to jest naturalne, że c chce mieć float z kropką, a nie z przecinkiem. Tutaj będzie kwestia (wg mnie) zmiany locale na np. amerykańskie w programie i później wypisanie/wczytanie tej liczby. Pytanie tylko czy taka operacja jest dozwolona.
slomek
Posty: 8
Rejestracja: 20 marca 2007, 23:13

Post autor: slomek »

Dostałem odpowiedź na LQ. Rozwiązaniem może być np ustawienie:

Kod: Zaznacz cały

export LC_LOCALE=C
Sprawdziłem i działa. Dopisałem to do /etc/bash.bashrc.
Możliwe, że coś zamieszałem przy lokalizacji systemu.
THX! :-)
Witek Baryluk
Beginner
Posty: 207
Rejestracja: 26 czerwca 2006, 01:49
Lokalizacja: Kraków za firewallem

Post autor: Witek Baryluk »

a może tak lokale sobie zmienić w programie setlocale, albo w shell export LC_ALL=C
pozdrawiam.
ODPOWIEDZ