Bevor ich mich an die Feinheiten des C-Programmierens mache, möchte ich überprüfen, ob mein gewünschtes Programm überhaupt realisierbar ist:
Mein Programm soll (sehr einfach dargestellt) folgendermaßen ablaufen:
1) Eine Text-Datei einlesen. (Der Text umfasst ca. 100 DinA4-Seiten mit Wörtern, Zahlen, Sonderzeichen.)
2) Überprüfen, wie oft bestimmte Wörter vorkommen.
3) Gegebenfalls andere Analysen durchführen.
4) Die Ergebnisse in einer Datei abspeichern.
Die für mich entscheidenden Fragen sind:
- Ist eine solche Datenmenge zu bewältigen? (100 DinA4-Seiten)
- Gibt es in C eine Funktion, mit der ich eine Text-Datei einlesen kann?
- Ist es problematisch Buchstaben, Zahlen und Sonderzeichen gleichzeitig abarbeiten zu wollen?
Danke für Eure Mithilfe!
Heli
Ist ein solches Programm in C realisierbar?
-
- Beiträge: 16
- Registriert: Di Apr 27, 2010 3:47 pm
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Ist ein solches Programm in C realisierbar?
Wo ein wille ist, ist auch ein Weg.Bevor ich mich an die Feinheiten des C-Programmierens mache, möchte ich überprüfen, ob mein gewünschtes Programm überhaupt realisierbar ist:
Wenn du C kannst, dann sollte es kein problem für dich sein, das Programm zu realisieren.
Selbst wenn auf jeder Din-A4 Seite 100.000 Zeichen stehen würden, bei 4-Byte pro Zeichen, wäre die Datei in PLain-Text nur ~38Mbyte groß, sollte also mit jedem neueren Computer Problemlos verarbeitet werden können.- Ist eine solche Datenmenge zu bewältigen? (100 DinA4-Seiten)
Nein, es ist aber Problematisch Wörter abzuarbeiten, denn DU musst dir jetzt Gedanken machen, ob Groß/Kleinschreibung, Verbindungszeichen oder Rechtsschreibfehler eine Rolle spielen und wenn ja welche.- Ist es problematisch Buchstaben, Zahlen und Sonderzeichen gleichzeitig abarbeiten zu wollen?
Es gibt Funktionen um Dateien einzulesen.- Gibt es in C eine Funktion, mit der ich eine Text-Datei einlesen kann?
Wenn du REINEN Text hast, dann kannst du das auch direkt über diese Funktionen, wenn du aber *.doc oder *.odt oder sonstige Formatierte Texte einlesen willst, musst du dir in der Spezifikation zum Dateityp den Aufbau der Datei anschauen und dementsprechend einlesen und Interpretieren.
Zum Speichern gelten die selben Regeln.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Ist ein solches Programm in C realisierbar?
Die Punkte, die Du aufgeschrieben hast, würde ich bei C vom Schwierigkeitslevel im Einsteigerbereich ansiedeln.tauberheli hat geschrieben:Bevor ich mich an die Feinheiten des C-Programmierens mache, möchte ich überprüfen, ob mein gewünschtes Programm überhaupt realisierbar ist:
Das bedeutet nicht, dass Du morgen anfängst und zum Wochenende fertig bist.
Du kannst mit C so ziemlich alles machen, es gibt also viel zu lernen.
100 A4 Seiten sind für moderne Computer in C keine erwähnenswerte Größe.tauberheli hat geschrieben:- Ist eine solche Datenmenge zu bewältigen? (100 DinA4-Seiten)
Da C so ziemlich die Grundlage für alles ist, ist alles realisierbar. (außer Kaffee kochentauberheli hat geschrieben:- Gibt es in C eine Funktion, mit der ich eine Text-Datei einlesen kann?

Nein, kein Problem.tauberheli hat geschrieben:- Ist es problematisch Buchstaben, Zahlen und Sonderzeichen gleichzeitig abarbeiten zu wollen?
Ich finde es gut, dass Du gleich mit einem Projekt an den Start gehst, das gibt Dir die Motivation und eine Richtung, wie Du lernen kannst. Aber bitte geh davon aus, dass vor Deinem Projekt auch erst etliche Übungsprogramme stehen, um Dein Verständnis zu schulen.
Wo ein While ist, ist auch ein Wegcloidnerux hat geschrieben:Wo ein wille ist, ist auch ein Weg.

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
-
- Beiträge: 19
- Registriert: Sa Jun 06, 2009 8:50 am
- Wohnort: Niederösterreich
Re: Ist ein solches Programm in C realisierbar?
Hätte mal was für dich zum anschauen
Das ist ein Programm, das Telefonnummer nach einem bestimmten Schema sortiert.
Das ist ein Programm, das Telefonnummer nach einem bestimmten Schema sortiert.
Code: Alles auswählen
/**
Autor: Benjamin Kraus
Klasse: 2AHEL
Datum: 28.1.2010
Dateiname: Teln11
Aufgabe: Telefonnummern aus einem .txt-file einlesen und für
Maschinenverarbeitung aufbereiten
Status: Fertig
Version: Final 1.2
**/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void verarbeitung(char*lpfad,char*spfad);
void verarbeitung(char*lpfad,char*spfad)
{
int i;
char telnr[100];
FILE*datei1;
FILE*datei2;
datei1=fopen(lpfad,"r"); //Hier wird die Lesedatei geöffnet
datei2=fopen(spfad,"w"); //Hier wird die Schreibdatei geöffnet
if ((datei1==NULL)||(datei2==NULL))
{
printf("Pruefen Sie bitte die Pfade\n");
}
else
{
while (fgets(telnr,100,datei1)!=NULL) //Die Zeichen werden als String eingelesen
{
i=strcspn(telnr,"+"); //Anfang der Nummer wird gesucht
if (i>=strlen(telnr)) //Wenn kein +
{
if ((strlen(telnr)<=6)&&(strlen(telnr)>=4)) //Nummern ohne Ortsvorwahl bekommen die
{
fprintf(datei2,"+432952"); //Hollabrunner Ortsvorwahl
i=0;
}
else
{
i=strcspn(telnr,"0");
if ((telnr[i]=='0')&&(telnr[i+1]!='0'))
{
fprintf(datei2,"+43"); // +43 wird am Anfang der Telefonnummer angehängt
i++;
}
}
}
for (;i<strlen(telnr);i++) //Zeichenweise aufrufen
{
if ((telnr[i]=='0')&&(telnr[i+1]=='0')) //Bei 00 am Anfang
{
fprintf(datei2,"+");
i++;
}
else if (((telnr[i]>='0')&&(telnr[i]<='9'))||(telnr[i]=='\n')||(telnr[i]=='+')) //Nur 0-9, + und neue Zeile eingelesen
{
fprintf(datei2,"%c",telnr[i]);
}
}
}
fclose(datei1);
fclose(datei2); //Die Dateien werden geschlossen
}
}
int main(int argc, char *argv[])
{
printf("Version: Final 1.2\n\n"); //Anzeige der Versionsnummer
char wh,lpfad[200],spfad[200];
do
{
if (argc==1)
{
printf("Bitte geben Sie die Quelldatei an\n"); //Der Quellpfad
scanf("%s",lpfad);
printf("Bitte geben Sie die Zieldatei an\n"); //Der Zielpfad
scanf("%s",spfad);
verarbeitung(lpfad,spfad);
} //Hier wird das Unterprogramm zur Verabeitung aufgerufen
else
if (argc==2) //Bei einem Parameter wird die Hilfe angezeigt
{
printf("\n\tWenn Sie keine Parameter eingeben, dann werden sie im\n\tProgrammverlauf nach den Pfaden gefragt.\n\tWenn Sie die Pfade als Parameter eingeben, geht das auch.");
}
else
if (argc==3)
{
strcpy(lpfad,argv[1]); //Hier werden die Dateipfade aus den Parametern üernommen
strcpy(spfad,argv[2]);
verarbeitung(lpfad,spfad); //das Unterprogramm wird aufgerufen
printf("Die Parameter wurden erfolgreich verarbeitet");
}
if (argc!=3)
{
printf("\nWollen Sie wiederholen?"); //Abfrage, ob man wiederholen will, bei manuellen Programmaufruf
scanf("\n%c",&wh);
}
else
{
wh='n'; //Diese Zeile wird benötigt, für Batchverarbeitung, da ist eine Abfrage, ob man wiederholen will unnötig
}
}
while ((wh=='j')||(wh=='J'));
return 0;
}
-
- Beiträge: 16
- Registriert: Di Apr 27, 2010 3:47 pm
Re: Ist ein solches Programm in C realisierbar?
Hallo Leute!
Habe das C-Tutorial inzwischen abgearbeitet. Wäre toll, wenn Ihr mir weiterhelfen könntet....
Soviel ich verstanden habe, kann man mit fgets() zeilenweise einlesen. D.h. bis zum Zeilenumbruch. Was ist aber, wenn ich von einem Fließtext wortweise einlesen möchte, d.h. immer bis zum nächsten Leerzeichen. Brauche ich da wieder eine andere Funktion?
LG und Danke im voraus,
Heli
Habe das C-Tutorial inzwischen abgearbeitet. Wäre toll, wenn Ihr mir weiterhelfen könntet....
Soviel ich verstanden habe, kann man mit fgets() zeilenweise einlesen. D.h. bis zum Zeilenumbruch. Was ist aber, wenn ich von einem Fließtext wortweise einlesen möchte, d.h. immer bis zum nächsten Leerzeichen. Brauche ich da wieder eine andere Funktion?
LG und Danke im voraus,
Heli
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Ist ein solches Programm in C realisierbar?
Zwei Möglichkeiten: Du kannst eine Zeile einlesen und anschließend strtok die Zeile in ihre Einzelteile zerlegen.tauberheli hat geschrieben:Hallo Leute!
Habe das C-Tutorial inzwischen abgearbeitet. Wäre toll, wenn Ihr mir weiterhelfen könntet....
Soviel ich verstanden habe, kann man mit fgets() zeilenweise einlesen. D.h. bis zum Zeilenumbruch. Was ist aber, wenn ich von einem Fließtext wortweise einlesen möchte, d.h. immer bis zum nächsten Leerzeichen. Brauche ich da wieder eine andere Funktion?
Oder Du schreibst einen eigenen Parser.
Ich lade meist die Datei komplett in den Speicher und anschließend einen eigenen Parser.
Einen solchen Parser, der einzelne Worte in einem Text ausliest, gebe ich meinen Programmierschülern auch prinzipiell als Aufgabe - es ist eine hervorragende Übung - sie wirkt häufig erstmal frustrierend, weil man reichlich Fehler machen kann, aber wenn man den Parser dann lauffähig hat, hat man viele Fehlermöglichkeiten kennengelernt, die man anschließend vermeiden kann.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.