Qt, QTextStream problem z locale, zapis do csv

0

Próbuję zapisać do pliku csv dane za pomocą QTextStream robię to mniej więcej tak:

			QTextStream out(&file);
			for (size_t i = 0; i < this->invoices.size(); ++i)
			{
				out << QString::fromStdWString(invoices[i].GetNumber()) << QString::fromStdWString(L";");
				out << QString::fromStdWString(invoices[i].GetDate()) << QString::fromStdWString(L";");
				out << QString::fromStdWString(invoices[i].GetName()) << QString::fromStdWString(L";");
				out << QString::number(invoices[i].GetNetto()) << QString::fromStdWString(L";");
				out << QString::number(invoices[i].GetBrutto()) << QString::fromStdWString(L";");
				out << QString::number(invoices[i].GetVat()) << QString::fromStdWString(L";");
				out << invoices[i].GetVatPercentage() << QString::fromStdWString(L";");
				out << endl;
			}
			file.close();

funkcje GetNetto(), GetBrutto(), GetVat() zwracają double jako liczbę z 'kropką' co excel niekiedy identyfikuje jako datę np. 9.26 jako wrzesień roku 2026.
Potrzebuję, żeby tam był przecinek.
próbowałem

out.setLocale(QLocale(QLocale::Polish, QLocale::Poland));

Ale nic to nie dało.
Ktoś coś?

2

Skoro ustawiłeś locale na QTextStream to możesz bezpośrenio wpisać wartość double do niego zamiast wcześniej konwertować na stringa, i Ci automatycznie już przekonwertuje kropkę na przecinek.
Ewentualnie możesz użyć klasy QLocale zamiast QString
QLocale

0

Dzięki!
Bez konwertowania na QString działa, tak jak wspomniałeś:

	out << invoices[i].GetNetto() << QString::fromStdWString(L";");
	out << invoices[i].GetBrutto() << QString::fromStdWString(L";");
	out << invoices[i].GetVat() << QString::fromStdWString(L";");

Btw, a co jeśli mam np.

wstring L"ala ma ; kota";

Jako, że jest tam średnik, to przeskakuje do następnej kolumny, a nie chciałbym. Można to łatwo zrobić?

0

Jeśli chcesz go usunąć to użyj

QString &QString::remove(QChar ch, Qt::CaseSensitivity cs = Qt::CaseSensitive)
0

Nie chce go usuwać tylko zostawić tam.
Jakbym z palca wpisał ten tekst w cudzysłowie do notatnika i zapisał jako csv, to jest ok. Musiałbym do każdego wstringa dodawać cudzysłów na koniec i początek? Czy można to jakoś bardziej elegancko zrobić?

1

W takim wypadku najlepiej sprawdzić wczesniej czy dany string posiada średnik i ewentualnie dodać cudzysłów. To akurat jest w rfc do csv, nawet na wiki jest opisane co robić w takim wypadku najlepiej jakbyś to sobie dokładnie przeanalizował i wtedy już potrzebne rzeczy zaimplementował - nie ma tego dużo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1