[c]Datei Durchsuchen/Ausgeben

sascha ak opi

Grünschnabel
Guten Morgen erst einmal :)
so früh und schon ein problem.

Also ich habe gerade meine ausbildung angefangen und bin da bei wie alle Anfänger ein Handscanner in C zu programieren ;)

Nun da ich haber eigendlich keine ahnung von c habe, stehe ich nun vor einem kleinen problem.

Ich habe eine .txt Datei mit Kundendaten:
PHP:
12345	hopf	große gasse 3	00000	entenhausen	03341235609	5	0	0	0	0
23456	maier hauptstr. 12a	12000	darkcity	0223486745	1	0	0	0	0
99999	hans	gartenweg 23 00000 entenhausen	03341235490	0	0	0	0	0
Die Daten sind alle durch ein Tab gerent, der nächste Kunde steht halt in der Zeile drunter.

Nun möchte ich gerne diese Datei durchsuchen und nach einem Kunden suchen um diesen aufrufen zu können.
Es sollen aber nur Nummer und Name durchsucht werden!

nach dem
PHP:
Kunden_Datei = fopen( "D:kunden.txt", "a" ) ;
hört es bei mir allerdings auf, da ich keine ahnung habe wie ich das ganze umsetzen muss.

meine struktur sieht folgenermassen aus:
PHP:
struct s_Kunden
{
	char nummer[50+1];
	char nachname[50+1];
	char adresse[10+1];
	int tele;
	char rabat[5+1];
	char flag1;
	char flag2;
	char flag3;
	char flag4;
 }s_KundenData;

Es wäre nett wenn mir jemand behilflich sein könnte :)

mfg
sascha
 
Hallo,

probier es einfach mit fopen und dann gesht du das file mit fread Byteweise durch bis zum Tab und immer so weiter.

Grüße
R.
 
Ritchie_Fomm hat gesagt.:
Hallo,

probier es einfach mit fopen und dann gesht du das file mit fread Byteweise durch bis zum Tab und immer so weiter.

meinst du in etwas so?

PHP:
char tmp[ZEILEN_LAENGE] = "";

fgets(tmp, ZEILEN_LAENGE, fp);
sscanf(tmp, "%[^\t]\t%[^\t]", string1, string2);

Vieleicht wäre es auch klug anstadt Tabs ";" oder "#" zu verwenden?

Sascha
 
klug wäre es alle mal einen anderen Delimiter zu verwenden, aber ich sehe du bist auf dem richtigen weg.

man kan das chararray aber auch in einer Schleife durchgehen und...

Grüße
R.
 
Hallo!

Es wäre echt besser wenn du "," nimmst. Deine Datei sollte also so aussehen:

12345,hopf,große gasse 3,00000,entenhausen,03341235609,5,0,0,0,0
23456,maier,hauptstr. 12a,12000,darkcity,0223486745,1,0,0,0,0
99999,hans,gartenweg 23,00000,entenhausen,03341235490,0,0,0,0,0

Code:
FILE *datei;

datei = fopen("PfadzudeinerDatei", "rt");
/*Fehlerabfrage*/
...

/*Datei durchsuchen*/
while(fgets(tmp, ZEILEN_LAENGE, datei) != NULL) {
    /*Einlesen der gesuchten Strings*/
    ...
}

/*Datei wieder schliessen*/
fclose(datei);

Wenn du eine CSV (=Comma Seperated Value) Datei hast, dann brauchst du eben in der Schleife noch eine Variable die eben ein Komma gespeichert hat (z.B.: char kommas = ','; ). In einer weiteren Schleife in der Schleife kannst du dann immer solange in tmp einlesen bis das gewünschte Komma auftaucht und das dann auch ausgeben.
 
Hi.
Buba235 hat gesagt.:
Wenn du eine CSV (=Comma Seperated Value) Datei hast, dann brauchst du eben in der Schleife noch eine Variable die eben ein Komma gespeichert hat (z.B.: char kommas = ','; ). In einer weiteren Schleife in der Schleife kannst du dann immer solange in tmp einlesen bis das gewünschte Komma auftaucht und das dann auch ausgeben.
CSV wird auch oft als Character Seperated Value bezeichnet - weil ob da nun ein Komma das Trennzeichen ist oder ein Semikolon oder irgend ein anderer Wert ist im Grunde egal. Es wäre allerdings ziemlich günstig wenn das Trennzeichen in den Daten nicht vorkommen kann/darf. Und du brauchst auch keine Variable die ein Komma speichert. Wozu soll das denn gut sein?

@sascha ak opi: Aber du kannst dir ruhig mal die letzten paar Themen von Buba235 anschauen, da macht er etwas sehr ähnliches.

Gruß
 
Besten dank euch beiden für die Tips! und das Tutorial!

Also dem Program wird/braucht man kein Komma eingeben(nur die trenzeichen halt in der Datei), also kan ich mir dieses CSV auch sparen?!

Ich werde das ganze morgen mal Testen, mal sehen wir ich damit zurecht kommen werde.

mfg
sascha
 
sascha ak opi hat gesagt.:
Also dem Program wird/braucht man kein Komma eingeben(nur die trenzeichen halt in der Datei), also kan ich mir dieses CSV auch sparen?!
CSV ist nur die Bezeichnung für das Dateiformat. Deine Datei ist eine CSV Datei, weil die Datensätze zeilenweise gespeichert und die Werte durch ein einzelnes Zeichen getrennt sind.

Wenn du dir CSV sparen willst dann mußt du ein anderes Dateiformat benutzen wie z.B. XML.

Gruß
 
Hallo erstmal :)

Danke noch mal für die Tips!

Ich habe also jetzt folgendes:

PHP:
while(c != EOF)
			{
  		c = fgetc(ptr_Datei);

 			if(c == ';')
   		// printf("Hier beginnt, bzw. endet (je nachdem wie man's siehst) eine spalte\n");

  		if(c == '\n')
  		  printf("Hier ist die Zeile zu ende und mit dem naechsten Zeichen beginnt die naechste Zeile\n");
		} 
				rewind(ptr_Datei); // setzt den filepointer (ptr_Datei) wieder auf den anfang der datei

				while(c != EOF)
		{
 				c = fgetc(ptr_Datei);
  			if(c == ';')
  	{
   	//		printf("Hier endet die spalte\n");
  		  mein_string[i] = '\0'; //ein string sollte immer mit dem zeichen '\0' abgeschlossen werden
  		 puts(mein_string);
  		   break; //verlässt die while-Schleife
  	}
  		else
 	 {
    mein_string[i] = c;
    i++;
    
 	 }
 	
	}

Nun möchte ich mit der "strcmp()" Funktion die Spalte Name und Nummer mit den Werten die ich eingebe vergleichen.
Könnte mir jemand sagen wo ich das ganze einbauen muss?

mfg
opener
 
Zurück