Gottesgeschenk Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 hallo zusammen wieder mal ich und wiedermal ein problem. ich soll aus einer datei 3 werte auslesen, die in der datei "test.txt" stehen: 18926 10559 78,25 die Zahlen sind durch 'tab' getrennt. das programm "verschluckt" aber das "," und den centbetrag! jetzt zu meinem richtigen problem im unten stehenden programm forme ich die int-zahl in einen string um. das soll auch so bleiben, also benötige ich eine funktion, die mir den float-wert in einen char-wert konvertiert - natürlich mit der kommastelle! ist das überhaupt möglich und wenn ja wie? danke im voraus für eure mühe! //////////////////////////////////////////////////// #include <stdio.h> //die vielen header dateien brauchen euch nicht zu stören #include "iostream" //dieser teil ist aus einem grösseren programm! #include <conio.h> #include <windows.h> #include <stdlib.h> void main () { FILE *einlesen; int i,Zahl[1152]; char testnr[6]; char szNummer1[6]; char testpreis[6]; int count=0, counter=0; einlesen = fopen ("e:\\test\\test.txt","r"); if ((einlesen = fopen ("e:\\test\\test.txt","r")) == NULL) { printf("ERROR"); } else { do { fscanf(einlesen,"%i",&Zahl[counter]); counter++; }while(Zahl[counter] != '\0'); _gcvt( Zahl[count], 6, testnr); count++; _gcvt( Zahl[count], 5, szNummer1); count++; _gcvt( (double)Zahl[count], 5, testpreis); count++; getch(); printf("%s",testnr); printf("\t"); printf("%s",szNummer1); testpreis[strlen(testpreis)-1]=0; printf("\t"); printf("%s",testpreis); //printf("%i",count); printf("\n"); } fclose(einlesen); getch(); } Zitieren
Guybrush Threepwood Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 warum ließt du die Werte nicht direkt als String ein? ansonsten kannst du auch sprintf oder _snprintf nehmen, obwohl ich mal irgendwo gelesen habe das man keine Funktionen benutzen sollte die mit einem _ beginnen, weil die nicht zum standart gehören würden. Ich weiß aber nicht ob da was dran ist. Zitieren
Shadax Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 Original geschrieben von Guybrush Threepwood [...] _snprintf nehmen, obwohl ich mal irgendwo gelesen habe das man keine Funktionen benutzen sollte die mit einem _ beginnen, weil die nicht zum standart gehören würden. [...] *k l u g s c h e i s s* seit C99 gehört snprintf zum Standard. Zitieren
nic_power Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 Hallo, Original geschrieben von Shadax *k l u g s c h e i s s* seit C99 gehört snprintf zum Standard. Er sprach von "_snprintf()"! Funktionen, welche mit einem Underscore beginnen, sollten nicht verwendet werden, da sie systemabhängig sind (bzw. sein können). Nic Zitieren
Shadax Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 Ja, genau, _snprintf sollte wirklich nicht verwendet werden - mein Gesabbel zielte aber eher darauf ab, eine Empfehlung zu geben, -welche- standardisierte Funktion man stattdessen verwenden kann. Zitieren
nic_power Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 Hallo, das Komma wird verschluckt, da es kein Bestandteil einer Fließkommazahl ist. Eine wenig elegante aber funktionierende Lösung wäre, dass Komma durch einen Punkt (während des Einlesens oder vor der Konvertierung) zu ersetzen. Nic Zitieren
Knuddlbaer Geschrieben 3. Juli 2003 Geschrieben 3. Juli 2003 Ich verstehe das Problem nicht. Mal abgesehen davon das %i nie eine fließkomma zahl bearbeitet und immer die nachkommestellen fehlen dürften... Wieso liest Du die Zahlen ein und wandelst sie wieder als String ? Der Umgekehrte Weg wäre einfacher. Erst als Text einlesen , dann das komma ersetzen und wenn nötig (wenn Du das überhaupt brauchst) in eine Zahl wandeln. Das könnte in C++ beispielsweise so aussehen: #include "stdafx.h" // Zum speichern der Werte in einem Vector #include <vector> // Zum einlesen aus Datei #include <fstream> // Naja , strings #include <string> // Für ptr_fun #include <functional> // für for_each und copy #include <algorithm> // Für die Ausgabe #include <iostream> #include <iterator> using namespace std; // Sucht das erste , und ersetzt es durch ein . void replacepoint(std::string & rep) { std::string::size_type pos; pos = rep.find(","); if(pos == std::string::npos) return; rep.replace(pos,1,"."); } int main(int argc, char * argv[]) { ifstream datei("e:\\test\\test.txt"); if(!datei) return 20; vector<string> platzhalter; string help; datei>>help; // 1. einlese versuch if(datei.fail()) // Prüfen ob ok return 20; do { platzhalter.push_back(help); // Speichern datei>>help; // Nächsten lesen }while(!datei.eof()); // Alles ok ? Wenn ja loop // Jeden der eingelesenen Zeichenketten nach , durchsuchen und durch . ersetzten for_each(platzhalter.begin(),platzhalter.end(),std::ptr_fun(replacepoint)); // Ergebnis auf dem Bildschirm ausgeben copy(platzhalter.begin(),platzhalter.end(),ostream_iterator<string>(cout,"\n")); return 0; } [/PHP] Zitieren
Gottesgeschenk Geschrieben 7. Juli 2003 Autor Geschrieben 7. Juli 2003 schon mal danke für eure antworten @knuddlbaer - ich soll das ganze in c programmieren. danke für die hilfe aber ich kann damit nix anfangen... so hier jetzt das beispiel programm: #include <stdio.h> #include <stdlib.h> #include <conio.h> void main( void ) { FILE *stream; char buffer[10000]; int i, ch; if( (stream = fopen( "e:\\test\\test.txt", "r" )) == NULL ) exit( 0 ); ch = fgetc( stream ); for( i=0; (i < 10000) && ( feof( stream ) == 0 ); i++ ) { buffer = (char)ch; ch = fgetc( stream ); } buffer = '\0'; printf( "%s\n", &buffer[0]); fclose( stream ); } das programm läuft soweit auch gut, jedoch habe ich das problem, dass ich die ausgabe nicht zerlegen kann! es liest mir die komplette datei korrekt aus, allerdings muss ich die datei zerlegen in die folgenden werte: der erste wert, also die 5- bzw. 6stellige zahl sollte als "testnr" abzuspeichern sein. die 2. zahl als "szNummer1" und die letzte als "testpr". testnr // szNummer1//testpr 18926***10559***78,25 35116***10855***102 127694***11680***197 127703***11685***49 127708***11689***15 60935***11781***198 34593***11800***138 100182***11811***25,30 (da das board die tabulatorsprünge nicht anzeigt, habe ich sie ersetzt durch ***) ich möchte die ausgabe aber komplett zerlegen! wie kann ich das machen? ich steh auf dem schlauch...:confused: Zitieren
Knuddlbaer Geschrieben 7. Juli 2003 Geschrieben 7. Juli 2003 Schau Dir mal strchr an. Tabs sind \t Zitieren
Gottesgeschenk Geschrieben 7. Juli 2003 Autor Geschrieben 7. Juli 2003 danke problem hat sich erledigt! Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.