# [C++] String aus WebSeite auslesen.



## Golumserbe (18. November 2010)

Ich möchte wenn eine Web Seite z.b. blablab.de/check/gr.php die Zahl 54 hat, dass dann ein Prozess weiter läuft und wenn meine Zahl 55 ist das dann eine Message Box aufkommt und einen Nachricht anzeigt.

Beispiel:



> gr.php
> 
> 54




```
C++

if(String==54)
{
//blabalbal
}

if(String==55)
{
//blabalbal
}
```

Ich habe keine Ahnung wie ich anfangen könnte und meine Fähigkeiten sind leider nur begrenzt weil ich C++ seit 3/4 Jahr angefangen habe zu lernen. Ich arbeite in einem Win32 Projekt .dll.

Wäre nett wenn mir einer helfen könnte.


----------



## vfl_freak (18. November 2010)

Moin,



Golumserbe hat gesagt.:


> Ich möchte wenn eine Web Seite z.b. blablab.de/check/gr.php die Zahl 54 hat, dass dann ein Prozess weiter läuft und wenn meine Zahl 55 ist das dann eine Message Box aufkommt und einen Nachricht anzeigt.
> 
> Beispiel:
> 
> ...



hmm, das habe ich jetzt *nicht wirklich* verstanden ...

Hast Du nun eine Zahl (int?) mit dem Wert 54 oder wirklich einen String ("54") 

Aber einen Vergleich "ist Stringvalue == Intervalue" gibt es nicht - Du kannst nur gleiche Datentypen vergleichen und musst ggf. zuvor casten!

Gruß
Klaus


----------



## Golumserbe (18. November 2010)

Ich möchte nur die Zahlen checken. Also wenn die .php datei 54 sagt, das dann ein der Code ausgeführt wird.

if(Vabriale==54)
{
}...


----------



## vfl_freak (18. November 2010)

Moin,



Golumserbe hat gesagt.:


> Ich möchte nur die Zahlen checken. Also wenn die .php datei 54 sagt, das dann ein der Code ausgeführt wird.
> if(Vabriale==54)
> {
> }...



schon klar, nur kannst so wie in Deinem ersten Post geschrieben, halt nicht vergleichen 
Es hängt halt davon ab, mit welchen Datentyp Du ausliest .....

Wenn es ein Integer ist :

```
const int iIrgendwas = 54;  // immer mit Konstanten arbeiten, NIE mit MAGIC  NUMBERS ******
const int iWasAnderes = 55;  // hier im Kommentar erklären, wofür diese Werte überhaupt stehen !!

int iWertVonWebsite = ... // Wert von Website
// ...
if( iWertVonWebsite == iIrgendwas )
{
    // tue irgendwas
}
else if( iWertVonWebsite == iWasAnderes ) // würde es immer mit ELSE machen, spart ggf. eine Prüfung !!
{
    // tue was anderes
}
```
 
Ist es jedoch ein String :

```
const string strIrgendwas = "54";  // immer mit Konstanten arbeiten, NIE mit MAGIC  NUMBERS ******
const string strWasAnderes = "55";  // hier im Kommentar erklären, wofür diese Werte überhaupt stehen !!

string  strWertVonWebsite = ... // Wert von Website
// ...
if( strWertVonWebsite.compare(strIrgendwas) )
{
    // tue irgendwas
}
else if( strWertVonWebsite.compare(strWasAnderes) )
{
    // tue was anderes
}
```
 
Gruß
Klaus


----------



## Golumserbe (18. November 2010)

Vielen dank. Wegen der Abfrage auf die Web Seite funktioniert nicht ganz richtig. Habe Probleme damit.


```
char* Abfrage(char* Address)
{
	char Return[10000] = "";
   char Res[100000] = "";
   char HttpAddress[1024] = "";
   bool ifHttp = false;

   if(!strstr(Address,"http://"))
   {   
      sprintf(HttpAddress,"http://%s", Address);
      ifHttp = true;
   }

   HINTERNET hOpen = InternetOpen("Internet Explorer 7.0",INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
   HINTERNET hFile = InternetOpenUrl(hOpen,ifHttp?HttpAddress:Address, NULL, NULL, INTERNET_FLAG_RELOAD, NULL);
   InternetReadFile(hFile,Return,sizeof(Return),(LPDWORD)Res);

   InternetCloseHandle(hOpen);
   InternetCloseHandle(hFile);
IWert=Wert;
   return Return;
}
```

Ich denke das der Syntax falsch ist und stecke fest...


----------



## vfl_freak (19. November 2010)

Moin,



Golumserbe hat gesagt.:


> Wegen der Abfrage auf die Web Seite funktioniert nicht ganz richtig. Habe Probleme damit.


ääh - bitte was 
Wo genau hast Du welches Problem ?



Golumserbe hat gesagt.:


> ```
> char* Abfrage(char* Address)
> {
> char Return[10000] = "";
> ...



Leider kenne ich den INet-Zugriff unter C/C++ nicht so genau und kann da nicht viel zu sagen, allerdings fallen mir die Zeilen à la

```
char Res[100000] = "";
```
auf ! Eine solche Zuweisung würde allenfalls bei Strings gehen, Char-Arrays solltest Du vlt. mit *memset* initialisieren 

```
string sRes = "";
// und 
char cRes[100000];
memset( &cRes, 0x20, sizeof cRes );
```

Gruß
Klaus


----------



## deepthroat (19. November 2010)

Hi.





vfl_freak hat gesagt.:


> allerdings fallen mir die Zeilen à la
> 
> ```
> char Res[100000] = "";
> ...


Warum sollte das nicht gehen?

Was ist für dich der Unterschied zwischen einem char-Array und einem (C-)String?

Mal abgesehen davon, das die Variablen überhaupt nicht initialisiert werden müssen, da die Parameter bei InternetReadFile alle OUT Parameter sind.

@Golumerbse: Du solltest uns evtl. mal verraten was nicht geht. Wenn die Syntax falsch wäre, bekommst du Compiler-Fehler. Welche?

Gruß

PS: Wer sagt eigentlich "der Syntax"? Syntax ist ein Femininum.

\edit: @Golumerbse: Du gibst dort einen Zeiger auf eine lokale Variable zurück. Das kann nicht funktionieren, da lokale Variablen sofort nach dem return weggeräumt werden. Du könntest z.B. einen std::string zurückgeben.

Und du castest zuviel. Grundsätzlich: wenn du castest um einen Compilerfehler wegzubekommen, dann wird es falsch.

```
std::string Abfrage(const char* addr) {
  DWORD bytesRead;

  if (InternetReadFile(hFile,Return,sizeof(Return), &bytesRead)) {
    return std::string(Return, Return + bytesRead);
  } else {
    // Fehler. Und nun?
  }
}
```


----------

