Beiträge von autoiter
-
-
Hey Leute,
ich habe hier ein Proggy, dass zur Steuerung und zum Streaming von einem Receivertyp dient. Dabei habe ich ein Problem mit Abstürzen, die ich bisher nicht in den Griff bekommen habe.
Bei mir tritt nie ein Problem auf und bei vielen anderen auch nicht. Bei manchen Leuten gibt es aber regelmäßig scheinbar unmotivierte Abstürze.Das hängt mit einer Funktion zusammen, die alle 10 Sekunden den EPG abruft und die Daten in ein Array schreibt.
(Das ist relativ ineffizient, weil ich die Daten eigentlich nur zum Anzeigen der Senderübersicht brauche. Das will ich auch ändern, aber den Fehler würde ich dennoch gerne verstehen, damit ich es in Zukunft besser machen kann.)
Anhand der Fehlermeldung aus der Konsole, die ich vom kompilierten Programm mit einer zweiten Programminstanz abfange (das gibts auch hier im Forum ich glaube von CheaterDieter), weiß ich die Zeile und den Fehler:
==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:Die Daten, die ich in eine Textdatei lade sehen so aus, wobei die Liste teilweise natürlich viel länger ist. Das sind die EPG Informationen über die gerade laufenden Sendungen:
5554043700012b66 1423024200 12600 303711504893903373 ZDF-Morgenmagazin
5554043700016d70 1423036200 2700 303711506001848303 Disco
5554043700016d6e 1423035600 2700 303711506001709186 Da kommt Kalle
5554043700016d6b 1423035000 2700 303711506001500791 Land unter Kontrolle
4294041b00012b5c 1423024200 12600 295830205545347489 ZDF-MorgenmagazinSpoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
local $EPGdaten[1500][5] ; Vor der Funktion. Fest auf 1500 EPG Events begrenzt. Das war bisher auch scheinbar nicht das Problem.Func Bsp()
[/autoit] [autoit][/autoit] [autoit]
If Not FileExists($PfadT & "Gt") Then InetGet($URLstart & $IP & ":" & $Webserver_Port & "/control/epg?ext", $PfadT & "Gt", 1, 1)
If FileExists($PfadT & "Gt") Then
$CopyEPGraw = FileCopy($PfadT & "Gt", $PfadT & "G", 1); hiermit versuche ich sicherzugehen, dass die Datei wirklich vollständig geladen ist, nachdem es auch mit InetGetInfo zu Abstürzen kam.
For $i = 0 To 25
If Not ($CopyEPGraw = 1) Then
Sleep(10)
Else
ExitLoop
EndIf
Next
EndIf
If FileExists($PfadT & "G") Then
Local $b2, $btemp
_FileReadToArray($PfadT & "G", $b2)
If IsArray($b2) Then
$m = UBound($b2)
;~ Global $EPGdaten[$m][5]; Das habe ich auskommentiert, weil die Neudeklaration lange dauerte. so habe ich das Array fest auf 1500 Einträge Einträge gesetzt.
Local $Sendung[$m][2]For $l = 1 To $m - 1
[/autoit]
If Not StringIsSpace($b2[$l]) Then ; Einfach mal hilflos geprüft, das keine Leerzeilen in den Daten sind.
StringReplace($b2[$l], " ", "_")
If @extended >= 4 Then ; Hier wollte ich sichergehen, dass auch wirklich 4 Splits möglich sind.
$aSplit = StringSplit($b2[$l], " ")
$EPGdaten[$l][0] = $aSplit[1] ; SenderID ; HIER TRITT DER FEHLER AUF. !!!!!!!!!!
$EPGdaten[$l][1] = $aSplit[2] ; Startzeit
$EPGdaten[$l][2] = $aSplit[3] ; Dauer
$EPGdaten[$l][3] = $aSplit[4] ; SendungsID
$atemp = StringSplit($b2[$l], " ")
For $j = 1 To $atemp[0]
If $j <= 4 Then ContinueLoop
$Sendung[$l][1] &= $atemp[$j] & " " ; Sendung
$EPGdaten[$l][4] = StringTrimRight($Sendung[$l][1], 1)
Next
EndIf
EndIf
Next
_ArrayDelete($EPGdaten, 0)
EndFuncFür jeden Tipp bin ich dankbar.
Grüße autoiter
-
Was meinst Du mit "längeren Test"?
Über mehrere Stunden läuft das auf jeden Fall problemlos. Jedes Mal, wenn ich meinen Rechner an habe, läuft auch der Anrufmonitor.
Ja, ich meinte das in etwa so. Bei mir kam irgendwann keine Reaktion mehr. (Bsp: Morgens um acht angemacht und mittags um halb eins plötzlich keine Reaktion mehr auf Anrufe).
Ich werde deinen mal testen. Wenn das durchläuft wäre das echt klasse. Da muss ich auch mal meinen Code raussuchen und vergleichen. Danke auf jeden Fall.
Das Problem mit mehreren Clients hatte ich auch bei anderen Programmen die ich ausprobiert habe. Besser lauscht nur ein Client direkt auf die Box. -
Danke Oscar
Hast du damit mal einen längeren Test gemacht? Ich habe das auch mal versucht. Aber nach einiger Zeit ist das Programm immer ausgestiegen und hat nicht mehr auf Anrufe reagiert.
Außerdem hatte ich das Problem, dass immer nur ein Client bei der Fritzbox direkt abfragen konnte. Wenn ein zweiter Client gestartet wurde, war der erste spätestens beim nächsten Anruf raus und hat nicht mehr reagiert.
Grüße autoiter -
Ich wollte vor einiger Zeit einen Anrufmonitor machen und dachte zu Anfang, ich müsste mich einloggen. Da habe ich die FB_Tools gefunden.
Eben ausprobiert. Version 1.5 funktioniert bei mir scheinbar immer noch einwandfrei (habe eine 7490 und habe es eben mit 6.23 ausprobiert). -
Ich würde es so machen:
[autoit]$string = "\\asdf\jkl\dsl\tzu\567\Autodesk-Viewer-2013\"
[/autoit][autoit][/autoit][autoit]StringReplace($string, "\", " ")
[/autoit][autoit][/autoit][autoit]
$fPos = @extended; @extended gibt im Erfolgsfall die Anzahl der umbenannten "\" wieder.
;~ MsgBox(0,"", @extended)$fFullpath = StringSplit($string, "\"); String wird gesplittet beim "\"
[/autoit][autoit][/autoit][autoit]$folder = $fFullpath[$fPos]; Der Ordner um den es dir geht, ist der $fPos-te Splitt.
[/autoit][autoit][/autoit][autoit]MsgBox(0,"", $folder); Ergebnis zur Ansicht
[/autoit]Das kann man natürlich noch kürzen. $folder braucht man ja nicht mehr zu füllen. Ich habe das nur mal der Darstellung wegen gemacht. Das ganze in einer Schleife.
-
-
Ich konnte deinen Code nicht starten. Fehlendes #include <RecFileListToArray.au3>.
Suche hat ergeben, dass es veraltet ist und durch _FileListToArrayRec ersetzt wurde.
Damit endet mein Versuch.Vielleicht erhältst du mehr Hilfe, wenn andere deinen Code ausprobieren können
-
Hi Oscar.
Vielen Dank für deine Arbeit. Tatsächlich spart die UDF Arbeit und ist sehr nützlich. Allerdings wäre es ein echtes Upgrade, wenn das Löschen/Übermalen von Bildern per Befehl in der Hintergrundfarbe der GUI stattfinden würde, damit es wirklich nach einem Löschen aussieht. -
Oh mein Gott. Echt doof. Danke dir.
-
Hi Leute,
ich bin mal wieder dumm. Warum funktioniert folgender Stringreplace nicht?(Für einen eigenen kleinen Callmonitor möchte ich Gespräche aus der "CONNECTED"-Liste entfernen, wenn sie beendet wurden).
[autoit]
[/autoit][autoit][/autoit][autoit]
$Replace = "24.11.2014;CONNECT;0;21;41901;" & @CRLF
$Replace &= "24.11.2014;CONNECT;1;22;41902;" & @CRLF
$Replace &= "24.11.2014;CONNECT;2;23;41903;" & @CRLF
$Replace &= "24.11.2014;DISCONNECT;1;dauerInSekunden;"
MsgBox(0, "", $Replace)For $i = 0 To 4 ; Anzahl der möglichen Verbindungen
[/autoit][autoit][/autoit][autoit]
If StringInStr($Replace, ";DISCONNECT;" & $i & ";") Then
StringReplace($Replace, ";DISCONNECT;" & $i & ";", ";DISCONNECT_old;" & $i & ";")
StringReplace($Replace, ";CONNECT;" & $i & ";", ";CONNECT_old;" & $i & ";")
EndIf
NextMsgBox(0, "", $Replace)
[/autoit] -
Winziger Punkt ist mir aufgefallen:
Beim Schließen des Programms kurz die Standardschrift in den Listview-Spaltenüberschriften sehen kann. Das sieht etwas komisch aus. Wenn ich unter Exit-Button die Zeile "_WinAPI_AnimateWindow($hGUI, BitOR($AW_BLEND, $AW_HIDE), 500)" vor die Iniwrite-Operationen schiebe, ist dieser Effekt für mich nicht mehr sichtbar.
Aber keine Ahnung ob das irgendwelche negativen Effekte haben kann. Wenn ich es geschafft habe, dein Skript in Gänze zu verstehen, haben sich meine Kenntnisse gegenüber heute wahrscheinlich verzehnfacht. Ein tolles Anschauungsmaterial! -
-
-
-
-
Nur eine Lappalie, aber ich melde es mal (wenn es denn hier reingehört ). Unter dem Titel der Website "AutoIt.de - Das deutsche AutoIt-Forum" hat sich ein Fehler eingeschlichen. Dort steht im Satz Programmiersprache nur mit einem "m".
-
@misterspeed
Danke für den Dropbox-Hinweis.@Gandalf
Ich habe gesehen, dass mit der deutschen Hilfe ausführliche FTP Beispiele geliefert werden. Lade dir die am besten hier im Forum herunter. -
Eigentlich sieht mir das sonst schon recht komplett aus. $Source ist hier deine lokale Datei und $Dest das Zielverzeichnis auf dem Server. Ich verstehe nicht ganz was du damit meinst, dass du ftpOpen nicht findest. Such mal in der Hilfe nach _FTP_Open.
PS: Ich bin auch ein ziemlicher Schmalhans. Aber wenn das hier falsch ist, wird es schon einer merken
#include <FTPEx.au3> ; geht noch nicht ins Codefeld..Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
...Local $server = ' '; Hier müssen einfach deine Daten rein.
[/autoit] [autoit][/autoit] [autoit]
Local $username = ' '
Local $ftpPort = ' '
Local $pass = ' 'Local $RemoteFile = '/var/Test.txt'
[/autoit] [autoit][/autoit] [autoit]
Local $LocalFile = 'C:\User\Desktop\Test.txt'
Local $Open = _FTP_Open('MyFTP Control')
Local $Callback = _FTP_SetStatusCallback($Open, 'FTPStatusCallbackHandler')Local $conn = _FTP_Connect($Open, $server, $username, $pass, 0, $ftpPort, $INTERNET_SERVICE_FTP, 0, $Callback)
[/autoit] [autoit][/autoit] [autoit]
;hier fehlen auch die Fehlerprüfungen ala If Not @error ThenLocal $folder = _FTP_DirSetCurrent($conn, '/var/')
[/autoit] [autoit][/autoit] [autoit]Local $file = _FTP_FilePut($conn, $LocalFile ,$RemoteFile)
[/autoit] [autoit][/autoit] [autoit]_FTP_Close($Open)
[/autoit] -
Ich könnte ja meinen Beitrag von oben ja zitieren, aber scheinbar liest du das, wie vorher auch, eh nicht
Nichts für Ungut, ich bin einfach notorisch frech.Wie chesstiger schreibt, gibt es andere Hoster die das ermöglichen. Bspw. http://www.bplaced.net/
Das ergab jedenfalls meine google-Suche: "free ftp webspace"