Problem mit Durchsuchen von dateien



  • manu1984 schrieb:

    ...
       scanf("%c", search);
       if(std::strcmp(inpline, search)==0)
    ...
    

    probier's mal mit '%s' statt '%c'.
    %c ist nur für einzelne zeichen gut.
    ...und das std:: ist auch überflüssig wenn's ein c-programm ist



  • okay, das klappt jetzt ....
    jetzt kann ich wenn ich eine komplette zeile eingebe die suchen ...
    aber so bin ich ja in einer endlos schleife drin ... ich will ja dass er mir alle zeilen ausspuckt.
    und dann das, woran ich mir wohl einen knoten in den kopf gedacht habe:
    wie kann ich des so machen, dass ich z.b. A eingebe und er dann dem A automatisch die zeile einfügt. also einfach die zeile durch eine variable ersetzen. da hat das total ausgesetzt 😞



  • manu1984 schrieb:

    aber so bin ich ja in einer endlos schleife drin ... ich will ja dass er mir alle zeilen ausspuckt.

    endlosschleife? da ist doch 'ne abfrage drin wenn 'fgets' NULL ausspuckt?

    manu1984 schrieb:

    wie kann ich des so machen, dass ich z.b. A eingebe und er dann dem A automatisch die zeile einfügt. also einfach die zeile durch eine variable ersetzen. da hat das total ausgesetzt 😞

    willste die zeile an ein 'A' anhängen? dann z.b. so:

    char speicher[GANZ_VIEL+1] = "A";  // A steht schon drin, platz ist noch GANZ_VIEL 
    strcat (speicher, die_zeile_die_du_mit_fgets_aus_der_datei_geholt_hast);
    /*
      wenn in der zeile "Hello Zeile" steht
      dann hast jetzt "AHello Zeile" im speicher
    */
    


  • na so meinte ich das nicht.
    also im moment muss ich eine ganze zeile eingeben, die ich suchen will.
    aber ich will eben die zeilen ersetzen durch variablen.
    dass ich nicht soviel eingeben muss sondern einfach nur A eintippe und dann automatisch die zeile xxx gesucht wird.
    also sozusagen "char A = "123456789" " und ich gebe dann bei suche zeile: A ein
    und dann spuckt er mir aus ob es eine zeile 123456789 gibt.



  • Das kannst du wie folgt machen:

    char A[MAXLENGTH] = "1234567890";
    printf("Wonach suchen sie? ");
    scanf("%c", &c);
    
    if(c == 'A')
      if(strcmp(<zeile>, A) ... );
    ...
    

    Entsprechend für weitere Konstanten...

    Grüsse
    Tobi



  • na also mit

    c == 'A'
    

    geht es doch eigentlich nicht, weil das ja strings sind.
    ich hab es jetzt mit strcmp gemacht.

    if(strcmp(search,"DES")==0 && strcmp(DES,inpline)==0)
         { printf("Match for DES in line %d\n", nline); }
    

    d.h. er vergleicht meine eingabe mit DES. wenn das so ist, dann nimmt er die kombination für DES und soll dann die kombination mit der datei vergleichen ob
    es vorhanden ist.

    printf("Zeile suchen: %s", search);       
       scanf("%s", search); 
    
      while(fgets(inpline, MAXLENGTH, fcache) != NULL) {			//Start while
    	  ++nline;
    
      if(inpline[0]=='e' && inpline[1]=='v' && inpline[2]=='e' && inpline[3]=='n')
        { 
    
       if(strcmp(search,"DES")==0 && strcmp(DES,inpline)==0)
         { printf("Match for DES in line %d\n", nline); }
    
       if(strcmp(search,"PDE")==0 && strcmp(PDE,inpline)==0)
         { printf("Match for PDE in line %d\n", nline); }
    
       else 
         { printf("No Match\n");
         printf("inpline: %s\n", inpline);
         printf("des....: %s\n", PDE);
           exit(1); }		
        }
      }
    

    dabei gibt er aus:
    No Match
    even WS_NN <10111110000000000000000ZZZZZZZZZZZZZZZZZZZZZZ0100011>
    even WS_NN <10111110000000000000000ZZZZZZZZZZZZZZZZZZZZZZ0100011>

    das kann doch nicht sein. die 2 lines sind gleich aber er sagt sie sind es nicht. wo ist da der fehler???



  • Zu eins:

    c == 'A'
    

    funktoniert sehr wohl wenn c ein einzelner Character ist. Kommt drauf an wie du es lieber hast.

    Zu zwei:

    while(fgets(inpline, MAXLENGTH, fcache) != NULL) 
    {	 //Start while
    	++nline;
    
      if(inpline[0]=='e' && inpline[1]=='v' && inpline[2]=='e' && inpline[3]=='n')
      { 
    
    	if(strcmp(search,"DES")==0 && strcmp(DES,inpline)==0)
    	{
    		 printf("Match for DES in line %d\n", nline); 
    	}
             else
             {
    	             if(strcmp(search,"PDE")==0 && strcmp(PDE,inpline)==0)
    	             {
    		      printf("Match for PDE in line %d\n", nline); 
    	             }
    
    	             else 
    	             {
       	                  printf("No Match\n");
    		         printf("inpline: %s\n", inpline);
    		         printf("des....: %s\n", PDE);
    		         exit(1); 
    	              }
             } 
      }
    }
    

    ist wohl eher dass was du meinst... Ohne dass else läuft er in den zweiten if else fall bei jeder Zeile rein.

    Grüsse
    Tobi



  • Hm .... ja das hab ich vergessen. tut mir leid! ist nicht nur ein zeichen sondern 70!

    okay ... aber jetzt ist das auch nicht so, wie es sein soll.

    also ich habe ja verschiedene zeilen.
    vereinfacht:
    ich setze:
    DEF = "123"
    PDE = "456"
    ABC = "789"
    .....

    jetzt will ich schauen:
    1. was gebe ich ein? DEF oder PDE oder ABC oder ...
    2. Wenn ich DEF eingebe, suche nach den zeilen wo 123 steht
    Wenn ich PDE eingebe, suche nach den zeilen wo 456 steht
    .......
    3. Wenn keine Zeile 123 , 456 , 789 , ... vorhanden ist gib aus: "No match"

    so einigermaßen gut beschrieben???



  • Ich habe leider keine Zeit sowas jetzt zu coden aber mal kurz und knapp
    als Pseudocode

    Eingabe: <zu suchender Wert>
    setze <einen_Zeiger> auf <deine_Konstante>
    
    solange <zu durchsuchende Datei> nicht zu Ende
      lies <zeile> aus <zu durchsuchende Datei>
      vergleiche <zeile> mit <einen_Zeiger>
    
      wenn vergleich trifft
        Ausgabe: Gefunden
        <gefunden> = true;
      ansonsten 
        weiter in der schleife
    
    wenn nicht <gefunden>
      kein treffer
    


  • ja das mach ich doch!!! aber er findet einfach nix.
    ich lasse die zeilen ausgeben (die stehen untereinander und sind vollkommen identisch!!!!!
    aber er bringt dennoch die else-anweisung für den fall dass keine übereinstimmmung da ist.



  • was kommt bei strcmp("abc", "abcde") raus?

    dir koennte strncmp helfen.



  • da rennt er auch in den else-block.



  • haa!!! mit strncmp gehts .... was war des dann? ein leerzeichen drin wo man nicht gesehen hat am ende?


Anmelden zum Antworten