Seite 1 von 1
Ist ein solches Programm in C realisierbar?
Verfasst: Di Apr 27, 2010 4:18 pm
von tauberheli
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
Re: Ist ein solches Programm in C realisierbar?
Verfasst: Di Apr 27, 2010 4:45 pm
von cloidnerux
Bevor ich mich an die Feinheiten des C-Programmierens mache, möchte ich überprüfen, ob mein gewünschtes Programm überhaupt realisierbar ist:
Wo ein wille ist, ist auch ein Weg.
Wenn du C kannst, dann sollte es kein problem für dich sein, das Programm zu realisieren.
- Ist eine solche Datenmenge zu bewältigen? (100 DinA4-Seiten)
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 es problematisch Buchstaben, Zahlen und Sonderzeichen gleichzeitig abarbeiten zu wollen?
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.
- Gibt es in C eine Funktion, mit der ich eine Text-Datei einlesen kann?
Es gibt Funktionen um Dateien einzulesen.
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.
Re: Ist ein solches Programm in C realisierbar?
Verfasst: Di Apr 27, 2010 5:40 pm
von Xin
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:
Die Punkte, die Du aufgeschrieben hast, würde ich bei C vom Schwierigkeitslevel im Einsteigerbereich ansiedeln.
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.
tauberheli hat geschrieben:- Ist eine solche Datenmenge zu bewältigen? (100 DinA4-Seiten)
100 A4 Seiten sind für moderne Computer in C keine erwähnenswerte Größe.
tauberheli hat geschrieben:- Gibt es in C eine Funktion, mit der ich eine Text-Datei einlesen kann?
Da C so ziemlich die Grundlage für alles ist, ist alles realisierbar. (außer Kaffee kochen

)
tauberheli hat geschrieben:- Ist es problematisch Buchstaben, Zahlen und Sonderzeichen gleichzeitig abarbeiten zu wollen?
Nein, kein Problem.
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.
cloidnerux hat geschrieben:Wo ein wille ist, ist auch ein Weg.
Wo ein While ist, ist auch ein Weg

Re: Ist ein solches Programm in C realisierbar?
Verfasst: Fr Apr 30, 2010 5:24 am
von Benjamin92
Hätte mal was für dich zum anschauen
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;
}
Re: Ist ein solches Programm in C realisierbar?
Verfasst: Di Jul 06, 2010 10:59 am
von tauberheli
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
Re: Ist ein solches Programm in C realisierbar?
Verfasst: Di Jul 06, 2010 11:30 am
von Xin
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?
Zwei Möglichkeiten: Du kannst eine Zeile einlesen und anschließend strtok die Zeile in ihre Einzelteile zerlegen.
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.