Chriss3000
Grünschnabel
Hallo an Alle erstmal.
Bin ein relativer Neuling auf dem Gebiet der Programmierung. Habe im Zuge einer Uni-Übung "Blut geleckt" und bin jetzt dabei meine Kenntnisse etwas am ausbauen.
Falls es jemanden interessieren sollte. Ich arbeite mit Windows XP und dem Bloodshed Dev-C++ Compiler.
Derzeit wollte ich ein kleines Projekt für den Clan in dem ich spiele realisieren.
Es geht darum in regelmäßigen Abständen eine Verbindung zu dem Webinterface eines Spieleservers aufzubauen und dann die auftauchende Seite / den html- Quelltext nach bestimmten Infos auszuwerten.
Zur Zeit habe ich 2 wesentliche Probleme (Kann sein, dass ich noch mehr habe! Aber die sind mir als Laie jetzt erstmal bewußt! ;-) ):
1) Ich würde inmein Programm gerne eineSchleife einbauen, die ale 30 sec automatisch das Haupprogramm startet und oben beschriebene Abfrage startet.
Sicher lässt sich das mit einer "While"-Schleife und einer "localtime"-Abfrage realisieren.
-> Gibt es da eine elegantere Lösung?
-> Kann ich verhindern, dass mein PC dann 95% der CPU-Kapazität darauf verwendet ständig die aktuelle Uhrzeit abzufragen?
2) Ich habe den Quelltext des Webinterfaces mal manuell runtergeladen (Kämpfe noch mit der Socket-Programmierung) und das Programm soweit vorbereitet, dass es die benötigten Daten bereits aus dem html-Quelltext extrahiert. Wennich nun die Zahlenanteile als Strings behandle geht alles wunderbar und die Ausgabe ist korrekt. transformiere ich die Zahlen aber eben in ein Zahlen Format, dann wird immer nur die Speicheradresse ausgegeben. Meine Vermutung geht in die Richtung, dass ich micht in der Pointer-Anwendung etwas verlaufen habe.

Bei der Ausgabe auf dem Bildschirm ist es ja egalob ich einen String oder eine Zahl habe, aber das ganze soll dann später noch in eine Datenbank. Da weiß ich jetzt eben nicht, ob es da dann als Zahl eingeschrieben werden muss.
Variante Code 1: Das ist mal im wesentlichen mein Code-Aufbau (bissel abgespeckt)
Es wirdeuch sicher gleich auffallen, dass ich die Variable erst mit Leerzeichen beschrieben habe. Das liegt daran, das mir im Falle des "Nicknamens" Immer teile des ersten verarbeiteten Nicks mit ausgegeben wurden wenn der zweite verarbeitete Nickname weniger Zeichn hatte. Ist bei den Daethvielleicht nicht sooo relevant aber ich habs dann einfach mal übernommen.
Im html-Code siehts soaus,das immer vorund nach der für mich relevanten Informationen einige überflüssige Zeichen stehen, die leider bedingt durch die Funktionsweise von fscanf mit auf meine Variablegeschrieben werden.
Code:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stddef.h>
int main ()
{
char Death_falsch[100], Death_richtig[10];
char *Pointer1_Death, *Pointer2_Death;
double Death;
char Death_richtig_richtig[10];
//double Death_richtig_richtig;
int Laenge_Death;
fscanf (Quelle, "%s", Death_falsch);
while (!feof(Quelle))
{
/* Beschreiben der Variablen mit " "!*/
sprintf(Death_richtig, " ")
size_t Laenge_Death_falsch;
/*Bestimmen derLänge des eingelsenen Strings*/
Laenge_Death_falsch = strlen(Death_falsch);
/*Pointer auf den Anfang des Speicherbereiches der Variablen*/
Pointer1_Death = Death_falsch;
/*Pointer auf den Anfang des für mich interessanten Teils des abgelegten Strings */
Pointer2_Death = Pointer1_Death + 15 /*15 sind die Zeichen des html-Codes die vor dem für mich interessanten Bereich stehen*/;
/*Bestimmen der Länge des für mich interessanten String-teils*/
Laenge_Death = Laenge_Death_falsch - 23/*23 sind die Zeichen des html-Codes die immer zuviel sind*/;
/* Kopieren des für mich interessanten Teils*/
strncpy(Death_richtig, Pointer2_Death, Laenge_Death);
/* Scannen des Strings da sscanf bis zum ersten Leerzeichen liest*/
/* So werden die überflüssigen oben auf die Variable geschriebenen Leerzeichen abgeschnitten.*/
sscanf(Death_richtig, "%s", Death_richtig_richtig);
Ausgabe der Variablen als Zahl
printf ("Death_r=%s\n\n", Death_richtig_richtig);
printf ("Death=%s\n\n", Death_richtig);
system ("PAUSE");
return 0;
}
Ergebnis: "Death_r = 0.00
Death 0.00" So soll es eigendlich auch aussehen.
Variante 2:
Code:
char *Pointer1_Death, *Pointer2_Death;
char Death_richtig_richtig[10];
double Death2;
...
sscanf(Death_richtig, "%s", Death_richtig_richtig);
sprintf(&Death2, "%d", Death_richtig_richtig);
Ausgabe der Variablen als String
printf ("Death2=%d\n\n", Death2);
printf ("Death=%s\n\n", Death_richtig);
...
Ergebnis: "Death2 = 825831936
Death = 0.00"
Warscheinlich ist das Ganze auch nicht besonders elegant. Aber es stammt von mir selbst(*stolzsei ;-)) und es läuft soweit.
Sicher sind meine Fragen für Profis kein wirkliches Problem, aber ich steh da trotz Suchfunktionen schon wirklich wie ein "Ochs vorm Berg!".
Daher bin ich für jede Hilfe dankbar.
Gruß
Chris
Zuletzt bearbeitet: