HTML mit Parameterübergabe, Post

Anfängerfragen zum Programmieren mit PureBasic.
proggernewbie
Beiträge: 19
Registriert: 23.03.2017 11:05
Computerausstattung: Win7 64bit, PureBasic 5.61 64bit
Linux Mint 19.1 64bit, PureBasic 5.71 64bit
VM (WinXP 32bit, PureBasic 5.71)
Wohnort: Kreis RE

Re: HTML mit Parameterübergabe, Post

Beitrag von proggernewbie »

Danke vielmals an alle, die mir bei der Problemstellung wertvolle Hilfe und Empfehlungen gegeben haben.
Ich persönlich habe das Gefühl, dass je mehr ich lerne, ich desto weniger verstehe.
Ich kann mir natürlich die Erklärung zur Data Section durchlesen, aber verstehen und dann sogar umsetzen tue ich sie nicht.
Sollte vielleicht doch lieber bei etwas zum "Anfassen" bleiben und nicht zu einem so abstrakten Thema neigen.
Oder die Aufgabe ist einfach zu hoch gesteckt für mich.


Trotzdem danke, lasse es auf mich wirken.
Inzwischen 61 Jahre alt.
Leider immer noch keine große Programmiererfahrung; nach Burn-Out vor fünf Jahren, starke Schwächen mit der Merkfähigkeit.
Körperlich und geistig schreitet der Verfall eben voran.
Trotzdem möchte ich versuchen etwas programmieren zu lernen und bin dankbar für jede Hilfe.
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: HTML mit Parameterübergabe, Post

Beitrag von juergenkulow »

Hallo,
nehme einen leeren Programm-Editor und beginne mit dem Testen.
Spätestens nach 25 Minuten ist Pause für mindestens 5 Minuten.

Code: Alles auswählen

; Beispiel für den Zugriff auf Daten die fest im Programm gespeichert sind. 
Define Wert.d   ; Wert ist eine Kommazahl. 
For i=1 To 5    ; Führe die Befehle bis Next 5 mal aus. 
  Read.d Wert.d ; Lese einen Kommazahl von der DataSection
  Debug Wert    ; Gebe diesen Kommazahl aus. 
  Debug FormatNumber(Wert,4) ; Gebe Kommazahl mit 4 Nachkommastellen aus. 
Next 
Define String.s="", SammelString.s="" ; String und SammelString sind leere Strings.
For i=1 To 4    ; Führe die Befehle bis Next 4 mal aus. 
  Read.s String ; Lese einen Stringwert von der DataSection
  Debug String  ; Gebe diesen Stringwert aus. 
  SammelString = SammelString + String ; Verbinde diesen String mit dem Sammelstring.
Next 
Debug SammelString
End

DataSection ; Anfang des Datenbereichs im Programm 
  Data.d 4711, 471.1 , 47.11, 4.711, 0.4711 ; Kölner Hausnummer aus der Zeit Napolions. Punkt steht für Komma.
  Data.s "Hallo ", "sichtbares ", "Universum", "." ; Hier stehen vier Beispiel Strings. 
EndDataSection ; Ende des Datenbereichs im Programm 
proggernewbie
Beiträge: 19
Registriert: 23.03.2017 11:05
Computerausstattung: Win7 64bit, PureBasic 5.61 64bit
Linux Mint 19.1 64bit, PureBasic 5.71 64bit
VM (WinXP 32bit, PureBasic 5.71)
Wohnort: Kreis RE

Re: HTML mit Parameterübergabe, Post

Beitrag von proggernewbie »

Hallo,
muss mich doch noch einmal zu diesem Thema melden.
Habe mir einen Code aus deinen Beispielen gebastelt, mit dem ich erst einmal eine bestimmte Anzahl von Zugnummern abfragen würde.
Mir geht es darum, die Abfrage so hinzubekommen, dass ich mit variablen Werten durch Hochzählen arbeiten kann, wie das auch mit den Kommentierungen bei den Anne-Will-seiten der Fall war. Ich begreife es sonst nicht.
Dein Vorschlag mit der Data.Section ist zwar sehr gut, aber davon sehe ich mich momentan noch meilenweit entfernt.

Habe also folgendes gebastelt:

Code: Alles auswählen

; Abfrage der Zugverbindungen nach hoch gezählten Zugnummern

EnableExplicit
InitNetwork()

Define Zug$=""
Define i.i
For i=10000 To 10100
  Zug$=Zug$ + Str(i)
Zug$=ReplaceString(Zug$," ","%20")
Define *Speicher=ReceiveHTTPMemory("http://reiseauskunft.bahn.de/bin/trainsearch.exe/dn?ld=15061&country=DEU&rt=1&trainname="+Zug$)
Define Dateiname$="Zug" + Zug$ + ".txt"
  If CreateFile(0, "E:\" + "Zug" + Zug$ + ".txt")   ; wir erstellen eine neue Text-Datei mit der entsprechenden Zugnummer
  WriteData(0,*Speicher,MemorySize(*Speicher))
  CloseFile(0)                         ; die zuvor geöffnete Datei schließen und damit die geschriebenen Daten endgültig speichern
  Else
    Debug "Konnte die Datei nicht erstellen!"
  EndIf
Zug$ = ""  
Next
Beim Ausführen des Codes werden die Textdateien mit der Nummer 10001 bis 10011 angelegt, nach der Nummer 10011 bekomme ich einen Fehler mit der Meldung

[15:34:56] Warte auf den Start des Executable...
[15:34:56] Executable-Typ: Windows - x64 (64bit, Unicode)
[15:34:56] Executable gestartet.
[15:37:40] [ERROR] Zeile: 14
[15:37:40] [ERROR] Das angegebene '*MemoryID' ist null.

Ist da der Speicher zu voll gelaufen oder wurde meine Anfrage vom Server beendet, weil ich zu oft innerhalb zu kurzer Zeit Anfragen gestellt habe?
Wie leere ich den entsprechenden Speicherbereich und gebe ihn wieder frei?
Wie könnte ich eine Verzögerung einbauen, damit ich den Server nicht zu sehr strapaziere?
Inzwischen 61 Jahre alt.
Leider immer noch keine große Programmiererfahrung; nach Burn-Out vor fünf Jahren, starke Schwächen mit der Merkfähigkeit.
Körperlich und geistig schreitet der Verfall eben voran.
Trotzdem möchte ich versuchen etwas programmieren zu lernen und bin dankbar für jede Hilfe.
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: HTML mit Parameterübergabe, Post

Beitrag von juergenkulow »

Hallo,

Code: Alles auswählen

; Abfrage der Zugverbindungen nach hoch gezählten Zugnummern

EnableExplicit
InitNetwork()

Define Zug$=""
Define i.i
For i=10000 To 10100
  Zug$=Zug$ + Str(i)
  Zug$=ReplaceString(Zug$," ","%20")
  Define *Speicher=ReceiveHTTPMemory("http://reiseauskunft.bahn.de/bin/trainsearch.exe/dn?ld=15061&country=DEU&rt=1&trainname="+Zug$)
  ; Wenn der Aufruf der Webseite nicht geklappt hat, gibt ReceiveHTTPMemorry 0 zurück und wird in *Speicher gespeichert.
  Delay(100) ; Ich probiere einfach mal eine Zentelsekunde zu warten.
  If *Speicher=0 ; Wenn die Webseite nicht geladen werden konnte, gebe eine Fehlermeldung aus und
                 ; erzeuge keine Datei. Wenn *Speicher gleich Null ist und auf den *Speicher zugegriffen
                 ; wird, gibt es einen Programmabbruch und die Meldung Das angegebene '*MemoryID' ist null.  
    Debug "Webseite bei Zug nicht gefunden:"+Str(i)
  Else
    Define Antwort.s=PeekS(*Speicher,MemorySize(*Speicher),#PB_UTF8) ; Kopiere Inhalt von *Speicher in einen String.
    If FindString(Antwort,"Keine oder fehlerhafte Verbindung") ; Steht in Antwort "Keine oder fehlerhafte Verbindung?
      Debug "Keine oder fehlerhafte Verbindung bei Zug :"+Str(i)
    EndIf   
    Define Dateiname$="E:\" + "Zug" + Zug$ + ".html"
    If CreateFile(0, Dateiname$)   ; wir erstellen eine neue Text-Datei mit der entsprechenden Zugnummer
      WriteData(0,*Speicher,MemorySize(*Speicher))
      CloseFile(0)                         ; die zuvor geöffnete Datei schließen und damit die geschriebenen Daten endgültig speichern
    Else
      Debug "Konnte die Datei "+Dateiname$+" nicht erstellen!"
    EndIf
    FreeMemory(*Speicher) ; Aufräumen -  *Speicher wird nicht mehr gebraucht. 
  EndIf 
  Zug$ = ""  
Next
; Keine oder fehlerhafte Verbindung bei Zug :10012
; Keine oder fehlerhafte Verbindung bei Zug :10017
; Keine oder fehlerhafte Verbindung bei Zug :10018
; Keine oder fehlerhafte Verbindung bei Zug :10042
; Keine oder fehlerhafte Verbindung bei Zug :10049
; Keine oder fehlerhafte Verbindung bei Zug :10050
; Keine oder fehlerhafte Verbindung bei Zug :10059
; Keine oder fehlerhafte Verbindung bei Zug :10060
; Keine oder fehlerhafte Verbindung bei Zug :10070
; Keine oder fehlerhafte Verbindung bei Zug :10071
; Keine oder fehlerhafte Verbindung bei Zug :10072
; Keine oder fehlerhafte Verbindung bei Zug :10073
; Keine oder fehlerhafte Verbindung bei Zug :10092

Programm berichtigt um FindString(Antwort,"Keine oder fehlerhafte Verbindung") und
Antwort.s=PeekS(*Speicher,MemorySize(*Speicher),#PB_UTF8) .
Entsprechen die erzeugten Dateien den Erwartungen?
Antworten