tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
22
ZUGRIFFE
3015
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    sascha ak opi sascha ak opi ist offline Mitglied
    Registriert seit
    May 2006
    Beiträge
    16
    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-Code:
    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-Code:
    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-Code:
    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
     

  2. #2
    Ritchie_Fomm Ritchie_Fomm ist offline Mitglied Gold
    Registriert seit
    Jul 2006
    Beiträge
    101
    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.
     

  3. #3
    sascha ak opi sascha ak opi ist offline Mitglied
    Registriert seit
    May 2006
    Beiträge
    16
    Zitat Zitat von Ritchie_Fomm
    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-Code:
    char tmp[ZEILEN_LAENGE] = "";

    fgets(tmpZEILEN_LAENGEfp);
    sscanf(tmp"%[^\t]\t%[^\t]"string1string2); 
    Vieleicht wäre es auch klug anstadt Tabs ";" oder "#" zu verwenden?

    Sascha
     

  4. #4
    Ritchie_Fomm Ritchie_Fomm ist offline Mitglied Gold
    Registriert seit
    Jul 2006
    Beiträge
    101
    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.
     

  5. #5
    Buba235 Buba235 ist offline Mitglied Brokat
    Registriert seit
    Apr 2006
    Beiträge
    278
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    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.
     

  6. #6
    Buba235 Buba235 ist offline Mitglied Brokat
    Registriert seit
    Apr 2006
    Beiträge
    278
    Außerdem gibts da noch ein gutes "Tutorial" über Dateien in C:

    Galileo Computing :: C von A bis Z – 18 Ein-/Ausgabe-Funktionen

    Da kannst dich austoben!
     

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von Buba235
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    sascha ak opi sascha ak opi ist offline Mitglied
    Registriert seit
    May 2006
    Beiträge
    16
    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
     

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von sascha ak opi
    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ß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    sascha ak opi sascha ak opi ist offline Mitglied
    Registriert seit
    May 2006
    Beiträge
    16
    Hallo erstmal

    Danke noch mal für die Tips!

    Ich habe also jetzt folgendes:

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

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

              
    if(== '\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(!= EOF)
            {
                     
    fgetc(ptr_Datei);
                  if(
    == ';')
          {
           
    //        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
     

  11. #11
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Warum machst du's denn so kompliziert? Warum machst du's nicht so wie Buba235:

    1. Kompletten Datensatz / Zeile einlesen - mit fgets.

    2. Den Datensatz in Felder aufteilen - mit strtok.

    Das gleiche Problem hatte Buba235 nämlich auch und RedWing hat schönen Beispielcode dazu gepostet: http://www.tutorials.de/forum/c-c/24...urchgehen.html

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  12. #12
    sascha ak opi sascha ak opi ist offline Mitglied
    Registriert seit
    May 2006
    Beiträge
    16
    Hi,

    erst mal Danke für die Hilfe deepthroat!
    Der Code in dem anderen Forumpost ist wirklich um einiges leichter!
    Leider kann ich diesen nicht Compillieren da ich immer den C2062 Error erhalte.
    Ich arbeite mit dem Windowscompiler in der Eingabeauforderung. (Version 8.00).

    Irgent wie wird bei mir die Mircosoft Seite wo steht wie man das behaben kann hier klicken nicht richtig angezeigt...(es ist kein text zu sehen )

    Wäre super wenn mir jemand sagen könnte was ich machen muss damit ich das Compillieren kann.

    mfg
    opener
     

  13. #13
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Naja, bei welcher Zeile tritt denn der Fehler auf?

    Die (alten) Support-Seiten von Microsoft sind natürlich für den IE "optimiert" und es gibt Probleme mit anderen Browsern. Allerdings steht auf der Seite nicht das es auch die VC++ Tools Version 8.0 betrifft.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  14. #14
    sascha ak opi sascha ak opi ist offline Mitglied
    Registriert seit
    May 2006
    Beiträge
    16
    Der Fehler trit an 2 stellen auf:

    PHP-Code:
    charword NULL
    und
    PHP-Code:
     for(0word != NULLi++){ 
    Mitlerweile konnte ich dir MS Seite auch öffnen aber wie du schon geschrieben hast betrift das den Compiler nicht.

    mfg
    opener
     

  15. #15
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Mit welcher Endung hast du denn die Datei gespeichert und wie lautet denn genau die Fehlermeldung? (Sollte doch sowas sein wie "type 'xyz' unexpected", oder?)

    Also mit Version 7.1 des MS C/C++ Kompilers läßt sich das Programm kompilieren.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 17.05.09, 11:41
  2. Antworten: 3
    Letzter Beitrag: 07.08.07, 21:08
  3. Antworten: 3
    Letzter Beitrag: 08.09.06, 10:07
  4. Antworten: 5
    Letzter Beitrag: 09.05.04, 14:58
  5. Antworten: 6
    Letzter Beitrag: 06.05.04, 16:39