Strings aus ascii datei einlesen

Hallo,

ich habe ein kleines Problem im C. Wahrscheinlich habe ich mich auch nur selber verwirrt und es ist gar nicht so schwer.
Also ich habe eine einfache ascii Textdatei in der ersten Spalte (die ich auch einlesen moechte) stehen Buchstaben/Zahlen kombinationen, sowas wie
xz78y
jt55j usw.

Ich moechte diese Textdatei einlesen und die erste Spalte in einen String schreiben (wenn da moeglich ist) um dann spaeter diese mit strcmp zu vergleichen.

Dazu lese ich zuerst die Datei ein

/* Teil 1: Einlesen */
printf(„Lese %s\n“, fname);
if(fp == NULL) {
perror(fname);
return 1;
}

und danach weiss ich leider nicht mehr weiter.

Denn bisher habe ich immer nur Zahlen in ein Array eingelesen aber das hilft mir hier nicht weiter oder?

Danke schonmal im vorraus!

Hallo,

Ich moechte diese Textdatei einlesen und die erste Spalte in
einen String schreiben (wenn da moeglich ist) um dann spaeter
diese mit strcmp zu vergleichen.

Also so sieht das grobe gerüst aus, um ein Datei einzulesen:

FILE\* fp;

fp = fopen("datei.txt","r");
if ( fp != NULL )
{
 char buff[512]; // muss lang genug sein

 // Zeile für Zeile in buff einlesen
 while ( fgets(buff, sizeof(buff), fp) != NULL ) // solange bis Dateiende erreicht
 {
 // an dieser stelle hast du die aktuelle Zeile im buff-String
 // diesen kannst du jetzt parsen (kopiere alles, bis das erste leerzeichen/ trennzeichen kommt)
 // Stringterminierung '\0' nicht vergessen
 // dann kannst du den string ins array speichern
 }
}

Denn bisher habe ich immer nur Zahlen in ein Array eingelesen
aber das hilft mir hier nicht weiter oder?

Ein String in C enspricht ein Array von Zeichen, wobei das Ende mit ‚\0‘ gekennzeichnet wird.
Möchtest du jetzt ein Array von Strings haben, musst du ein Array vom Array von Zeichen erstellen:

char asMyStringarray[ANZAHL_DER_STRINGS][LAENGE_JEDES_STRINGS+1];

-> das ist eine statische Deklarierung. Wenn du vorher nicht weißt, wie viele Strings kommen, dann musst du es dynamisch erstellen:

char* sMyStringarray[LAENGE_JEDES_STRINGS+1] = (char*)calloc( sizeof(char**), 1);

für jedes neues element müsstest du den speicher mit realloc um 1 vergrößern.

Zuweisung eines Strings in ein Stringarray:

char sMyString[100] = {"Erste Zeile"}
char asMyStringArray[20];

strcpy(asMyStringArray[0], sMyString);
strcpy(asMyStringArray[1], "Zweite Zeile");
strcpy(asMyStringArray[2], "Dritte Zeile");
...

Hallo Phygirl

Der Tipp mit FILE* war schon gut, nur ist die fscanf() wohl die bessere Wahl:
http://cplusplus.com/reference/clibrary/cstdio/fscanf/

Wenn ich in der Datei sowas drin habe (je Zeile),

asdf34 sdfger23 fkgjjboir78

kann ich das so einlesen:

#include 

int main ()
{
 FILE\* fp;
 fp = fopen("datei.txt","rt");
 if ( fp != NULL )
 {
 char tempList[3][128];
 while ( (fscanf(fp, "%s %s %s", 
 tempList[0], tempList[1], tempList[2])
 )
 != EOF
 )
 {
 /\* mit den drei Strings etwas machen \*/
 }
 } 
 return 0;
}

Am Ende der Datei kommt das „EOF“, und die Schleife bricht ab.
Das „EOF“ ist ein Makro, das mit der Rückgabe von fscanf() verglichen wird.
Du bearbeitest also immer nur eine Zeile zur Zeit. Finde ich persönlich so am besten.
Die fscanf() unterscheidet die 3 Strings nach Weissräumen, liest also je 3 Wörter ein.

lG
Martin B