Offline Zähler erhöhen und abspeichern
Johnny
- programmiertechnik
0 Hoscha
Hallo!
Die Aufgabenstellung an sich ist einfach, trotzdem grübele und suche ich nunmehr seit Tagen nach einer funktionierenden Lösung.
Aufgabe:
Ein aufrufbares Programm (.exe oder .bat) soll einen Zähler laden (am besten aus .txt-Datei), inkrementieren und wieder abspeichern.
Beispiel:
Es gibt die Datei counter.txt mit Inhalt: "120"
Das Programm macht daraus dann eine Datei counter.txt mit Inhalt: "121". Programm und Datei sind bei mir offline auf meinem PC.
An sich ja einfachst, nur kann man mit DOS-Batch-Programmierung nichts berechnen. Da müßte ich jetzt dies Mini-Programm in irgendeiner Programmiersprache schreiben. Noch kann ich nur leidlich Javascript, nur damit geht´s ja nicht, da Javascript nicht auf Dateien zugreifen kann und der Code nicht als .exe abspeicherbar ist.
Welche Programmiersprache ist denn am besten dafür geeignet und wo kann ich diese am schnellsten lernen? Oder kann mir jemand dieses Mini-Programm schreiben? ;-)
Muchas Gracias
JOhnnY
Welche Programmiersprache ist denn am besten dafür geeignet und wo kann ich diese am schnellsten lernen? Oder kann mir jemand dieses Mini-Programm schreiben? ;-)
Hi Johnny,
wenn du es selbst schreiben möchtest, denn die Copy-Paste-Methode ist nicht immer zu empfehlen ;-), dann wäre die Sprache "C" eine Möglichkeit.
Der Quelltext könnte dann so ähnlich aussehen:
#include <stdio.h>
#include <stdlib.h>
main()
{
char text[80+1];
int zahl;
FILE *einlesen;
einlesen= fopen("c:\count.txt","r");
if (einlesen==0)
{
printf("Kann Datei nicht oeffnen");
}
while(!feof(einlesen))
{
fgets(text,80,einlesen);
}
fclose(einlesen);
zahl = atoi(text);
zahl = zahl +1;
itoa(zahl,text,80);
einlesen= fopen("c:\count.txt","w");
fputs(text,einlesen);
fclose(einlesen);
system("PAUSE");
}
Zwar etwas umständlich und die eingelesene Zahl ist auf 80 Stellen begrenzt Das dürfte zwar reichen; aber verursacht viel Quelltext, da zuerst ein String eingelesen wird (mit 80 Stellen) und dieser dann zwecks Erhöhung um eins in einen Integer umgewandelt wird (durch "atoi").
Eleganter wäre es in Perl, das setzt aber voraus, dass du einen Perl-Interpreter z.B. auf einen lokalen Webserver bei dir installiert hast, um Perlskripte ausführen zu können.
Viele Grüße,
Holger
Hallo Holger,
wenn du es selbst schreiben möchtest, denn die Copy-Paste-Methode ist nicht immer zu empfehlen ;-), dann wäre die Sprache "C" eine Möglichkeit.
Der Quelltext könnte dann so ähnlich aussehen:
-----
habe den Quelltext so in einen eben frisch gedownloadeten Compiler eingegeben, gab aber eine Fehlermeldung: "Funktion wird in main erwartet in Line 11" - was auch immer damit gemeint ist... Kannst Du das Proggy vielleicht selber mal zur .exe machen und mir mailen? Das wäre grandios!
Zwar etwas umständlich und die eingelesene Zahl ist auf 80 Stellen begrenzt Das dürfte zwar reichen; aber verursacht viel Quelltext, da zuerst ein String eingelesen wird (mit 80 Stellen) und dieser dann zwecks Erhöhung um eins in einen Integer umgewandelt wird (durch "atoi").
-----
ach, umständlich ist mir in diesem Fall ziemlich wurscht - die Alternative ist 1000 oder 10000 Text-Dateien mit jeweils einer Zahl per Batch-File umzubenennen und DAS IST umständlich!
Eleganter wäre es in Perl, das setzt aber voraus, dass du einen Perl-Interpreter z.B. auf einen lokalen Webserver bei dir installiert hast, um Perlskripte ausführen zu können.
-----
hab isch net...
Muchas Gracias
JOhnnY
Hi Johnny,
habe den Quelltext so in einen eben frisch gedownloadeten Compiler eingegeben, gab aber eine Fehlermeldung: "Funktion wird in main erwartet in Line 11" - was auch immer damit gemeint ist... Kannst Du das Proggy vielleicht selber mal zur .exe machen und mir mailen? Das wäre grandios!
Ich weiss, woran das liegt. Dein Compiler kotzt sich mit recht aus, weil ich den Rückgabe- und Übergabewert der Funktion main nicht definiert hab. Da main eben nichts zurückliefert und keinen Parameter erwartet, müsste ich sie als "void main(void) definieren. Kannst es ja mal ausprobieren.
Die exe-Datei schick ich dir gleich!
Grüßle,
Holger