Zum Inhalt springen

Zeilenumbruch beim Dateienauslesen? Dateiauslesen allgemein?


Speddy Conzales

Empfohlene Beiträge

Hi,

ich habe hier ein kleines Problem.

Ich will eine Datei auslesen und dabei nach einem bestimmten Wort suchen (will mir die Anzahl ausgeben lassen, wie häufig das Wort in dem Text vorkommt). Nun sind dort leider Zeilenumbrüche in der Datei (alle 65 Zeichen). Wie muß ich die beim auslesen berücksichtigen? Gibt es da einen Trick oder merkt es das Programm automatisch (also der scanf-Befehl)? Mit welchem Befehl bearbeite ich den die Datei am besten? Geht halt darum, daß ich z.B. nach dem Begiff Wurst suche... wollte das ganze als Char-Variable speichern und dann nachher so suchen lassen...

Wer kann mir da weiterhelfen? :)

Thx, wenn jemand was weiß :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

also da gibt es mehrere Moeglichkeiten

du liest zeichen fuer zeichen ein und fraegst nach dem Zeichen '\n' ab das steht fuer den Zeilenwechsel

oder du verwendest getc() das liest immer eine Zeile ein bis zum '\n'

zum Vorhanden sein: schau dir mal die Stringmanipulation Routines an

ich denke es muesste mit strcspn gehen

kleines Beispiel :

#include <string.h>

#include <stdio.h>

void main( void )

{

char string[] = "xyzabc";

int pos;

pos = strcspn( string, "abc" );

printf( "First a, b or c in %s is at character %d\n",

string, pos );

}

hoffe ich konnte dir etwas helfen

Liebe Gruesse

Hasi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Willst du das ganze in nacktem C oder in C++ machen ?

In C empfiehlt es sich meisten, die Datei Zeichen für Zeichen zu durchsuchen. Dann wird ein '\n' einfach als normales Zeichen interpretiert und du mußt dir gar keine Gedanken darum machen.

Du suchst nach dem ersten Buchstaben im Wort, wenn du ihn findest, schaust du ob der nächste paßt etc. bis dein Wort gefunden ist oder nicht. Höhere Routinen machen intern auch nichts anderes.

Der Käptn

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke, Speddy Conzales wollte doch von einer Datei lesen...

char *fgets(char *s, int n, FILE *stream);

fgets() aus stdio.h liest maximal n-1 Zeichen nach `s' aus `stream'. Wird ein Zeilenumbruch oder das Dateiende früher entdeckt, werden nur die Zeichen bis zu diesem Zeilenumbruch (bzw. bis zum Dateiende) nach `s' geschrieben (einschliesslich des Zeilenumbruchs).

Bei Erfolg wird `s' geliefert, bei Misserfolg ein Null-Zeiger (`s' bleibt dann unberührt).

Bespiel:

char s[2048];

FILE *f;

// ... Datei öffnen ...

while( fgets(s, sizeof(s), f) )

{

printf("Zeile gelesen: %s", s);

}

// ... Datei schliessen ...

Sobald eine Zeile erfolgreich aus der Datei gelesen wurde, kann mit strcmp() aus string.h nach einer bestimmten Zeichenfolge gesucht werden:

int strcmp(const char *s1, const char *s2);

Hier:

strcmp(s, "Wurst");

strcmp() liefert bei Gleichheit beider Zeichenfolgen 0, bei Ungleicheit wird ein Wert ungleich 0 geliefert: war das erste unterschiedliche Zeichen in s1 grösser, wird ein Wert >0 geliefert, war es kleiner, dann <0.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm ich hab ein ähnliches Problem, bin jetzt aber durcheinander weil ich ein anderes Tutorial durcharbeite.

Ich will folgendes erreichen:

- .exe aufrufen mit 2 Parametern (Quelldatei, Zieldatei)

- die Quelldatei durchparsen und damit in jeder Zeile die 3 anführenden Zeichen rausschneiden

- den neuen Inhalt in die Zieldatei schreiben.

Das Aufrufen mit den 2 Parametern hab ich hinbekommen, auch kann ich auf die Datei zugreifen, aber irgendwie find ich nicht raus wie man Zeilenweise ausliest und dann direkt die ersten 3 Zeichen jeder Zeile abschneidet ...

Dann am Ende alles in die neue Datei schreiben.

int main(int argc, char *argv[]) // liefert bei Fehler 1 zurueck

{

cout << "Uebergeben wurden " << argc << " Argumente...\n";

if (argc != 2)

{

cout << "Aufruf: " << argv[0] << " " << argv[1] << " " << argv[2] << endl;

}

//Dateizugriff

ifstream fin(argv[1]); // zum Lesen oeffnen

if (! fin)

{

// Öffnen ist gescheitert => Fehlerbehandlung

}

char ch;

char dummy;

while (fin.get(ch)) //Zeichenweise einlesen geht, will aber Zeilenweise!

{

cout << ch;

//Inhalt bearbeiten ? und dummy zuweisen

dummy = ch;

cout << dummy;

}

fin.close();

Hmm falls einer Zeit hat mir das kurz zu erläutern ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

So für alle die es interessiert, ich bin endlich mit den Pointern klargekommen, ist ne ganz schöne Umgewöhnung ...

int main(int argc, char *argv[]) // liefert bei Fehler 1 zurueck

{

if (argc != 3)

{

// Parameter fehlen

return(2);

}

FILE *inFile;

FILE *outFile;

char line[2000];

inFile=fopen(argv[1],"r");

outFile=fopen(argv[2], "w");

if(inFile == NULL || outFile == NULL)

return(1);

while(fgets(line,2000,inFile )!=NULL) {

fprintf(outFile,"%s",line+3);

}

fclose(inFile);

fclose(outFile);

return(0);

}

--------------

Den String musste ich nicht manipulieren, sondern einfach den Pointer + 3 nehmen, dann hatte ich die ersten 3 Zeichen abgeschnitten.

Mit fgets() bekommt man eine Zeile, bis zum Zeilenende (\n).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstmal THX An alle für die tollen Tipps :)

Bringen mich schon richtig weiter :)

Ich habe da nur noch eine Frage... *sorry*, aber wie mache ich das, wenn das gesuchte Wort auf 2 Zeilen aufteilt ist.

Also z.B.

BlablablablaMilchm

aschine

Wie kann ich die ganzen Zeilen zu einem langen String oder einer langen Datei zusammen fügen, damit ich diesen Fehler umgehen kann?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...