Avatar billede bemula55 Nybegynder
20. november 2005 - 14:04 Der er 12 kommentarer og
1 løsning

Konvertere punktum til komma

Hej

Jeg er ved at lave et program som skal kunne udskrive nogle tal til en csv fil så de kan åbnes i excel. Men jeg har det problem at c++ spytter tallene ud med . i stedet for , og det bliver excel helt rundforvirret over... Hvordan får jeg løst dette problem, således at c++ udskriver , i stedet for .

Jeg har søgt en del her på siderne og er kommet fremt il følgende men det virker stadig ikke

jeg benytter bloodshed dev++(findes der evt. andre gode og gratis alternativer)

PS: Jeg er ret ny i c++


-------------------------------------------------------------

#include <iostream.h>
#include <fstream.h>
#include <math.h>
#include <string.h>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>


using namespace std;

double f(double x);

main()
{
    double i;
    char Tal[];

    ofstream TekstFil;
    TekstFil.open("Output.csv");
       
    i=-10.35;

    ostringstream convStream;
    convStream << i;
    Tal[] = convStream.char();


    *strchr(Tal,'.') = ',';
    cout << Tal << "\n";

    TekstFil.close();
    system("pause");
}
Avatar billede bertelbrander Novice
20. november 2005 - 14:50 #1
Man kunne gøre noget i stil med:

#include <iostream>
#include <fstream>
#include <math.h>
#include <string.h>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

template<typename T>
void Out(std::ostream &os, T val)
{
  stringstream SS;
  SS << val;
  string S = SS.str();
  string::size_type pos;
  while((pos = S.find('.')) != string::npos)
      S[pos] = ',';
  os << S;
}

int main()
{
  ofstream TekstFil;
  TekstFil.open("Output.csv");

  double d = -10.35;
  Out(TekstFil, d);
  int x = 123;
  TekstFil << ";";
  Out(TekstFil, x);


  TekstFil.close();
}
Avatar billede bemula55 Nybegynder
20. november 2005 - 15:43 #2
Ja det fungerer jo upåklageligt...

Kan du evt lægge nogle kommentarer på koden uden for main() for det forstår jeg ikke det store af...

Anyway....hvis du ikke gider så bare læg et svar, så får du point... Opgaven er jo løst
Avatar billede bertelbrander Novice
20. november 2005 - 16:58 #3
Out er en template funktion, dvs. der findes en Out for alle typer T som brugeren kan finde på at kalde.

I Out stream'er vi parametren val over i stringstream'en SS, en stringstream er en stream ligesom filer og cout, men gemmer i en streng.

Derpå læser vi strengen fra SS over i string'en S (S = SS.str())

Så laver vi en loop hvor man først finder pos på punktummer, hvis der findes et punktum udskiftes det med et komma.

Til slut skrives den modificerede S til output streame.

Jeg samler ikke på point.
Avatar billede bemula55 Nybegynder
20. november 2005 - 17:30 #4
så siger jeg tak
Avatar billede arne_v Ekspert
20. november 2005 - 18:51 #5
andet forslag:

#include <iostream>
#include <locale>

using namespace std;

int main()
{
    double x = 12.34;
    cout << x << endl;
    cout.imbue(locale("Danish"));
    cout << x << endl;
    return 0;
}

[men check lige om din compiler understøtter det ! jeg tror ikke at dev-cpp gør - af
forunderlige grunder understøtter den kun C locale ikke C++ locale]
Avatar billede arne_v Ekspert
20. november 2005 - 18:51 #6
i C er det:

#include <stdio.h>
#include <locale.h>


int main()
{
    double x = 12.34;
    printf("%f\n",x);
    setlocale(LC_ALL, "Danish");
    printf("%f\n",x);
    return 0;
}
Avatar billede bemula55 Nybegynder
21. november 2005 - 18:08 #7
Du har ganske ret arne v. Den første kode du gav virker ikke i bloodshed dev++, men den anden er derimod fin. Jeg kan desværre bare ikke findeud af c. Kender du evt. en anden gratis compiler eller evt et billigt alternativ...

Men ellers en god og enkelt kode...
Avatar billede arne_v Ekspert
21. november 2005 - 18:09 #8
printf virker jo også i C++ ...
Avatar billede arne_v Ekspert
21. november 2005 - 18:10 #9
Borland C++BuilderX Personal Edition
MS Visual C++ 2005 Express

er begge gratis

til dit formål er Borland nok bedst
Avatar billede bemula55 Nybegynder
21. november 2005 - 19:30 #10
Okay.... jeg prøver lige at hente de to programmer... Det ser jo ud til at være nogle store filer så jeg vender nok først til tilbage i morgen ;-)
Avatar billede bemula55 Nybegynder
22. november 2005 - 20:55 #11
jep... så virker det hele... tak for hjælpen... læg evt et svar
Avatar billede arne_v Ekspert
22. november 2005 - 22:58 #12
mig ?
Avatar billede bemula55 Nybegynder
23. november 2005 - 13:09 #13
ja
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester