Datei lesen int und string sortieren

Thomasio

Erfahrenes Mitglied
Ich hab da eine .txt, die sieht etwa so aus

123
abcd
45623
defr
blabla
11
usw

nun muss ich die Datei lesen, und dabei int und string aussortieren, so dass ich hinterher ein array mit ints und ein array mit strings habe
in jeder zeile steht immer entweder eine zahl oder ein string, anordnung und anzahl zeilen kann aber verschieden sein
mein problem ist nun, dass er mir alle zeilen als string liest, weil jede zeile mit \n endet
wie mache ich das?
 
Jede Dateizeile wird grundsätzlich als String gelesen, denn das ist es, was sie ist. Manche Strings kannman als Zahlen interpretieren. Dazu mußt Du testen, ob nur Ziffern im String enthalten sind oder nicht. Also den String von vorne nach hinten durchgehen und bei jecem Zeichen prüfen, ob es eine Ziffer ist. (Kleiner Tipp: Funktion isdigit(...) verwenden)
 
so weit so gut

(hab ich erwähnt, dass ich erst vor ein paar tagen angefangen habe zu lernen? dachte das wäre offensichtlich)

mit dem tip weiss ich mal, in welchen zeilen eine zahl steht
aaaaaaaaaaaaaaber
ich hab das ganze web durchwühlt nach "convert string int", bin 100ten von links gefolgt, nur kein einziger liefert mir ein brachbares ergebnis, auch hier im forum gibts keinen einzigen brauchbaren treffer zum thema (auch nicht wenn ich es in deutsch schreibe)

im prinzip sagen alle seiten die ich dazu finde das gleiche, ich brauche einen CString oder <sstream>, ich habe aber weder noch, mein GNU gcc liefert mir 100te von fehlern, ala undefined bzw. file not found wenn ich versuche da was zu includen
ich hab sogar in der FAQ von GNU eine <sstream> zum download gefunden, aber wenn ich die include bekomme ich gleich noch mehr fehler von weiteren files not found

ich bin schon fast geneigt mir n anderen compiler zu besorgen, aber irgendwie denk ich mir, das löst evtl mal dieses problem, nur dass ich danach vermutlich andere probleme haben werde
wer verrät mir denn wie ich das mit gcc machen kann, bzw was mache ich denn falsch hier? wenn in 100 webseiten keine einzige mein problem anspricht, denke ich mal ich bin der einzige depp im lande der das offensichtliche übersieht

gibts nicht irgendwas einfaches? so wie in php?
$integer = intval($string);
DAS wäre ne sache
 
Zuletzt bearbeitet:
Hallo,

hier kannst du dir abgucken wie du Zahlen aus einer Datei als Int verfügbar machst...
War letztens erst hier im Forum, les dir den Beitrag einfach mal durch...

Link

Ich denke das müsste anpassbar an dein Problem sein.

MfG Turri
 
Zum umwandeln kannst Du z.B. die C-Funktion atoi (= ascii to integer) verwenden:
Code:
int atoi( const char *string  );
Wenn Du Fließkommazahlen hast, dann kannst Du auch atof (= ascii to float) verwenden
Code:
double atof( const char *string  );
Damit kannst Du normale Dezimalzahlen umwandeln.
Wenn Du dann mal andere Schreibweisen hast (Expotentialschreibweise, Hexadezimalzahlen, Oktalzahlen), kannst Du sscanf verwenden.
Code:
int sscanf( const char *buffer,  const char *format [, argument ] ...  );
 
@ Turry, jockey,

danke für die antworten, von dem typ hab ich schon ein paar dutzend im web gefunden, löst nur leider nicht mein problem, wie ich schon in meinem letzten beitrag geschrieben hatte

im prinzip sagen alle seiten die ich dazu finde das gleiche, ich brauche einen CString oder <sstream>, ich habe aber weder noch, mein GNU gcc liefert mir 100te von fehlern, ala undefined bzw. file not found wenn ich versuche da was zu includen
ich hab sogar in der FAQ von GNU eine <sstream> zum download gefunden, aber wenn ich die include bekomme ich gleich noch mehr fehler von weiteren files not found
 
Hi.
Thomasio hat gesagt.:
@ Turry, jockey,

danke für die antworten, von dem typ hab ich schon ein paar dutzend im web gefunden, löst nur leider nicht mein problem, wie ich schon in meinem letzten beitrag geschrieben hatte
Erstmal solltest du uns verraten was du versuchst zu lernen. C oder C++? Welches Betriebssystem verwendest du? Wie sieht dein Code aus? Wie hast du ihn versucht zu kompilieren? Kurz: Was genau hast du gemacht?

Die Methoden um Dateien zu lesen und Strings in Integer zu konvertieren unterscheiden sich in beiden Sprachen doch erheblich - obwohl man in C++ auch die Methoden von C benutzen könnte.

Um C++ Programme mit GCC (GNU Compiler Collection) zu kompilieren, mußt du den g++ Compiler verwenden. Das gcc Frontend ist nur für C zuständig.

Gruß
 
was ich versuche zu lernen ist erstmal C, aber mit zielrichtung C++ und später Win32
dazu hab ich mir 2 fette bücher zugelegt und einige dutzend tutorials im web gesucht, die sind zwar als einzelne meist nicht besonders, aber sie ergänzen sich ganz gut, so dass ich mir den sinn aus einer kombination verschiedener tutorials rausklauben kann
zu anfang bin ich da etwas querbeet rumgehüpft, ein wenig C, dann wieder C++ und auch n paar sachen in Win32, habe aber inzwischen begriffen, dass ich mit C anfangen und mich da erstmal durcharbeiten muss

installiert habe ich mir CODE::BLOCKS, der wurde mir mehrfach empfohlen, und schaut mir auch recht gut aus
drin enthalten ist gcc und mingw, also alles was ich brauche

bis ich nu in einem meiner bücher auf diese übung gestossen bin, wo ich <sstream> brauche, was C:B aber nicht includen kann, zumindest hab ich nicht rausgefunden wie, bzw ich bekomme einen haufen fehlermeldungen
darum hab ich dann versucht das ganze von der eingabeaufforderung zu machen
damit habe ich mal den ersten teil der übung gelöst, in dem es drum ging die datei anzulegen, lesen und schreiben, indem ich mir aus einem der tutorials rausgesucht habe, wie man das mit funktionen macht, die in <stdio> enthalten sind, nur der zweite teil funktioniert damit nicht mehr, weil <stdio> wohl keine funktion hat string nach int zu wandeln, sprich ich brauche nun doch <sstream>
also stehe ich da mit dem kurzen hemd
 
Hi

da du aus der dateien nur strings lesen kannst (klar im textdateien sind strings gespeichert),
sollst du die nachdem lesen umwandeln und getrennt speichern.

dafür habe ich für dich ein kleines beispiel geschrieben wie du aus einem array von strings integer werte und strings trennen kannst. das beispiel habe ich in C++ geschrieben, aber danach in C umgewandelt da ich bemerken habe dass du C benutzt (gcc frontend ist nur für C programme)

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



int main(){

	char *a[4] = {"34","ab","65","ghf"};  
	int b[2], j = 0, k = 0;
	char c[2][20];

	for(int i=0; i<4; i++){				
		if(atoi(a[i]))					
			b[j++] = atoi(a[i]);		
		else
			strcpy(c[k++], a[i]);			
	}
	
	for(int i = 0; i < 2; i++)
		printf("integer : %d string : %s\n", b[i], c[i]);
		
	return 0;

}

hoffe das kleines beispiel hilft weiter.
auslesen aus dem dateien und speicher allokieren überlasse ich dir ;). aber wenn du noch probleme damit hast denn erweitere ich es gern.


Mfg
 
hey klasse
heissen dank

ich melde mich dann mit dem nächsten problem, sobald ich kapiert habe was deine funtion da macht ;)

wenn mir in der zwischenzeit noch jemand erklären könnte, warum C::B sich weigert <sstream> zu includen, während sämtliche anfänger tutorials davon ausgehen, dass das selbstverständlich geht (zumindest wird mit keinem wort erwähnt, dass es probleme damit geben könnte) wäre mir erstmal geholfen

danke nochmal
Thomas
 
Zurück