Datei mit Schleife auslesen

Mit "Form" meint er, dass du z.B. den Inhalt in einem IF einrücken sollst, also je nach Hierarchie-Ebene, z.B:
C++:
if (0=1)
{
  cout << "0=1****";
}
else if (9==9)
{
  if (4==4)
  {
    cout << "alles eingerueckt!";
  }
}
 
Ich habe mir den Syntax der Funktionen nun angeschaut, habe aber immer noch Fragen dazu:

C:
char zeile[256];
 
while (NULL != fgets(zeile, 256, f)) {
  if (zeile[0] != '|') {
    // unerwartetes Zeichen ...
  } else {
    const char *wort = zeile + 1; 
    //wird gesagt, dass zeile irgendein Zeichen länger ist als Wort?
    char *konj, *typ, *stamm;
    //Initialisierung von char *konj, char *typ, char *stamm?
    konj = strchr(wort, '+');
    //Auslesen bis +?
    if (konj == NULL) continue;
    //Falls konj==+?

    typ = strchr(konj, ':');
    if (typ == NULL) continue;
 
    stamm = strchr(typ, '*');
    if (stamm == NULL) continue;
 
    *konj++ = '\0';
    *typ++ = '\0';
    *stamm++ = '\0';
    //Löschen der chars? 
    printf("Wort: %s\n"
           "Konjugationen: %s\n"
           "Typ: %s\n"
           "Stamm: %s\n",
           wort, konj, typ, stamm);
  }
}

Und wo kann bzw. soll man überprüfen, ob die Frage des Users mit der Ausgabe übereinstimmt? Bis jetzt gibt das Programm einfach alle Wörter der Datei aus.

cwriter
 
Zuletzt bearbeitet:
Ich habe nun vieles mit Deepthroats Code ausprobiert und habe damit folgendes geschrieben:

C:
#include "stdlib.h"
#include "windows.h"
#include "stdio.h"
#include "conio.h"
#include "time.h"




int main(int argc, char *argv[])
{

    FILE* f;
    FILE* fa;
    int inhalt;
    char Abfrage[256];  
    char Ruckmeldung[256];
    int Konj;
  
  f = fopen("Buch.lltv", "r");
  
  if(f==NULL)
  {
  printf("Es wurde kein Woerterbuch gefunden. Bitte lade oder erstelle eines.\n Das Programm kann nicht fortfahren.\n\n");
  _sleep(5000);
  return 0;
  }
  
  printf("Bitte gib das gewuenschte Wort ein.\n");
  scanf("%s", &Abfrage);
  
  fseek(f,0,SEEK_SET);
  inhalt=0;
  
  
  
 
char zeile[256];
 
while (NULL != fgets(zeile, 256, f)) 
{  
  if (zeile[0] != '|') 
  {
    printf("Dieses Woerterbuch ist Fehlerhaft.\n");  
  } 
  else 
  {
    const char *wort = zeile + 1;
    char *konj, *typ, *stamm;
    
     
    konj = strchr(wort, '+');
    if (konj == NULL) continue;
 
    typ = strchr(konj, ':');
    if (typ == NULL) continue;
 
    stamm = strchr(typ, '*');
    if (stamm == NULL) continue;
 
    *konj++ = '\0';
    *typ++ = '\0';
    *stamm++ = '\0';
 
    if(strstr(zeile,Abfrage)!=NULL)
    {
       
    }
    else
    {
       continue;
    }
    
    printf("\n\n"
           "Wort: %s\n"
           "Konjugationen: %s\n"
           "Typ: %s\n"
           "Stamm: %s\n"
           "\n\n",
           wort, konj, typ, stamm);
    
    
  }
}

  fclose(f);
  
  system("PAUSE");
  return 0;
    
}

Hat irgendwer Einwände dagegen oder Vorschläge? Ansonsten wäre dieses Theme geschlossen.

Danke an alle Helfer (besonders an Deepthroat)

cwriter
 
Und wo kann bzw. soll man überprüfen, ob die Frage des Users mit der Ausgabe übereinstimmt? Bis jetzt gibt das Programm einfach alle Wörter der Datei aus.
Genau da wo die Ausgabe gemacht wird...
Ich habe nun vieles mit Deepthroats Code ausprobiert und habe damit folgendes geschrieben:

C:
    if(strstr(zeile,Abfrage)!=NULL)
    {
       
    }
Das aktuell aus der Datei ausgelesene Wort befindet sich in der Variablen "wort". Warum nimmst du denn nicht einfach diese Variable zum Vergleichen?

Ich würde auch nicht unbedingt "Abfrage" in "zeile" mit strstr suchen, da du sonst auch Teilworte finden würdest. (z.B. halten => vorenthalten ?)
C:
if (strcmp(wort, Abfrage) == 0) {
  ...
}

Gruß
 
@Deepthroat

Das aktuell aus der Datei ausgelesene Wort befindet sich in der Variablen "wort". Warum nimmst du denn nicht einfach diese Variable zum Vergleichen?

Ich würde auch nicht unbedingt "Abfrage" in "zeile" mit strstr suchen, da du sonst auch Teilworte finden würdest. (z.B. halten => vorenthalten ?)

C:
if (strcmp(wort, Abfrage) == 0) {
  ...
}

Das wäre natürlich auch eine Möglichkeit. strstr() hat hier aber den Vorteil, dass es mehr Vorschläge liefert als strcmp(), was bei einem Wörterbuch durchaus von Vorteil ist, oder?

Oder bremst strstr() das System bei einer grossen Datei stärker als strcmp?

Danke für die Rückmeldung

cwriter
 
Das wäre natürlich auch eine Möglichkeit. strstr() hat hier aber den Vorteil, dass es mehr Vorschläge liefert als strcmp(), was bei einem Wörterbuch durchaus von Vorteil ist, oder?
Das kommt auf die Anforderung an; und wie groß das Wörterbuch ist. Wenn mir für ein Wort 50 Treffer angezeigt werden (die nicht sortiert sind), dann wäre würde ich evtl. Schwierigkeiten haben das Wort zu finden was ich suche...

Du könntest ja z.B. erstmal nach einem genauen Treffer suchen und wenn nichts gefunden wurde andere Wörter vorschlagen.

Oder bremst strstr() das System bei einer grossen Datei stärker als strcmp?
cwriter
Beide Funktionen sind von der Laufzeit her zu vernachlässigen.

Gruß
 
@Deepthroat

Das kommt auf die Anforderung an; und wie groß das Wörterbuch ist. Wenn mir für ein Wort 50 Treffer angezeigt werden (die nicht sortiert sind), dann wäre würde ich evtl. Schwierigkeiten haben das Wort zu finden was ich suche...

Darüber habe ich mir auch schon Gedanken gemacht, aber es ist ja wie bei Google: Findet man was nicht, versucht man es mit präziseren Fragen.

Mein Problem ist , dass die Kommandozeile "nur" etwa 300 Zeilen hat, was bei 5 Zeilen pro Wort ins Gewicht fällt. Kennst du eine Möglichkeit, die Zeilenanzahl der cmd zu vergrössern?

cwriter
 
Darüber habe ich mir auch schon Gedanken gemacht, aber es ist ja wie bei Google: Findet man was nicht, versucht man es mit präziseren Fragen.
Wie willst du denn präziser Fragen wenn das Wort nunmal "x" ist und "x" in 50 anderen Worten vorkommt?
Mein Problem ist , dass die Kommandozeile "nur" etwa 300 Zeilen hat, was bei 5 Zeilen pro Wort ins Gewicht fällt.
Du könntest das Ausgabeformat ändern.
Kennst du eine Möglichkeit, die Zeilenanzahl der cmd zu vergrössern?
Stelle die Puffergröße höher ein. Siehe z.B. http://www.its05.de/computerwissen-...m-windows/cmd_exe_-_eigenschaften_einste.html

Gruß
 
Zurück