Tratsch rund um Autoit / Autoit Talk | kleinere Fragen

05/12/2012 17:19 Lawliet#46
Ich parse gerade an etwas rumm, dabei hab ich ein Problem mit meinem $Files Array.

$Data =
Code:
00000000EC0000005D0000001C273F49000000005346540000000000555650414E0000000000009C010000610000001C273F490000000053465400000000005556574152424C4500000000000049010000530000001C273F490000000053465400000000005556524F54415445000000000000050300007B0000001C273F490000000053465400000000005753504F53585A50414E000000000000FD010000370000001C273F490000000053465400000000005753454E565245464C454354464C4F4F5200000000000034020000D10000001C273F490000000053465400000000005753504F53524F5441544541524F554E445900
Code:
While True
		$i += 1
		ReDim $Files[$i][3]
		$posi = StringInStr($data, "1C273F49", 0, 1, $posi + 8)
		If $posi Then
			$Files[$i - 1][1] = Dec(ConvertRezBack(StringMid($data, $posi - 16, 8)))
			$Files[$i - 1][2] = Dec(ConvertRezBack(StringMid($data, $posi - 8, 8)))
			For $c = 2 To 8 Step 2
				_ArrayDisplay($Files)
				$Files[$i - 1][0] &=  BinaryToString("0x" & (StringMid($data, $posi + 22 - $c, 2)))
			Next
		Else
			ExitLoop
		EndIf
		ConsoleWrite($posi & @CRLF)
	WEnd
Die For Schleife:
Code:
For $c = 2 To 8 Step 2
				_ArrayDisplay($Files)
				$Files[$i - 1][0] &=  BinaryToString("0x" & (StringMid($data, $posi + 22 - $c, 2)))
			Next
löscht mir meine alten Ergebnisse, die ich weiter oben über
Code:
$Files[$i - 1][1] = Dec(ConvertRezBack(StringMid($data, $posi - 16, 8)))
			$Files[$i - 1][2] = Dec(ConvertRezBack(StringMid($data, $posi - 8, 8)))
ermittelt habe.
Wo ist das Problem?^^
05/12/2012 17:20 KDeluxe#47
@Der-Eddy:
Wie liest du den Quellcode den aus?

Code:
<script type="text/javascript"> vbmenu_register("postmenu_XXX", true); </script>
findet sich nur im Quelltext, wenn du eingeloggt bist. Bei einem einfachen InetRead() Befehl wäre es ja so, als ob du die Seite als Gast besuchst. Gäste verfügen nicht über dieses Menü, sondern werden bei einem Klick auf den Namen direkt auf das Profil weitergeleitet.
Würde jetzt einfach mal vermuten, dass es deine Fehlerquelle ist.

Zeilenumbrüche kannst du je nach Quelle mit @CR, @LF oder @CRLF finden.
Code:
#include <Array.au3>

$Source = BinaryToString(InetRead("http://www.elitepvpers.com/forum/autoit/1868201-tratsch-rund-um-autoit-kleinere-fragen-5.html#post16651583", 1))
If Not @error Then
	$bla = StringRegExp($Source, 	'<meta property="fb:app_id" content="(.*?)" />' & @CRLF & _
									'<meta property="og:site_name" content="(.*?)" />', 1)

	If IsArray($bla) Then _ArrayDisplay($bla)
EndIf
@CR → \r
@LF → \n
@CRLF → \r\n

Die Escape-Zeichen kannst du verwenden, wenn du die Funktion StringFormat() verwendest:
Code:
#include <Array.au3>

$Source = BinaryToString(InetRead("http://www.elitepvpers.com/forum/autoit/1868201-tratsch-rund-um-autoit-kleinere-fragen-5.html#post16651583", 1))
If Not @error Then
	$bla = StringRegExp($Source, StringFormat('<meta property="fb:app_id" content="(.*?)" />\r\n<meta property="og:site_name" content="(.*?)" />'), 1)
	
	If IsArray($bla) Then _ArrayDisplay($bla)
EndIf
05/12/2012 18:09 Der-Eddy#48
Quote:
Originally Posted by KDeluxe View Post
@Der-Eddy:
Wie liest du den Quellcode den aus?

Code:
<script type="text/javascript"> vbmenu_register("postmenu_XXX", true); </script>
findet sich nur im Quelltext, wenn du eingeloggt bist. Bei einem einfachen InetRead() Befehl wäre es ja so, als ob du die Seite als Gast besuchst. Gäste verfügen nicht über dieses Menü, sondern werden bei einem Klick auf den Namen direkt auf das Profil weitergeleitet.
Würde jetzt einfach mal vermuten, dass es deine Fehlerquelle ist.

Zeilenumbrüche kannst du je nach Quelle mit @CR, @LF oder @CRLF finden.
Code:
#include <Array.au3>

$Source = BinaryToString(InetRead("http://www.elitepvpers.com/forum/autoit/1868201-tratsch-rund-um-autoit-kleinere-fragen-5.html#post16651583", 1))
If Not @error Then
	$bla = StringRegExp($Source, 	'<meta property="fb:app_id" content="(.*?)" />' & @CRLF & _
									'<meta property="og:site_name" content="(.*?)" />', 1)

	If IsArray($bla) Then _ArrayDisplay($bla)
EndIf
@CR → \r
@LF → \n
@CRLF → \r\n

Die Escape-Zeichen kannst du verwenden, wenn du die Funktion StringFormat() verwendest:
Code:
#include <Array.au3>

$Source = BinaryToString(InetRead("http://www.elitepvpers.com/forum/autoit/1868201-tratsch-rund-um-autoit-kleinere-fragen-5.html#post16651583", 1))
If Not @error Then
	$bla = StringRegExp($Source, StringFormat('<meta property="fb:app_id" content="(.*?)" />\r\n<meta property="og:site_name" content="(.*?)" />'), 1)
	
	If IsArray($bla) Then _ArrayDisplay($bla)
EndIf
Ich logge mich über TCP ein und lese dann den Quelltext aus
Mit '<span style="color:(.*?)">(.*?)</span><!-- google_ad_section_end --></a>' finde ja schon was blos nicht genau das was ich suche
05/12/2012 18:24 mo.tennis#49
ehhm hab noch ne frage...gibt es ne möglichkeit, dass sich der script von selbst in einen anderen ordner kopirt..kann nur ne kopie sei....muss nich der script selbst sein


mfg mo
05/12/2012 18:55 Achat#50
Code:
FileMove(@ScriptFullPath,@TempDir,1)
05/12/2012 21:49 mo.tennis#51
so nächste frage :D

ehhm wenn ich einen porcess mit ProcessClose beenden will geb ich ja die pid an also :
ProcessClose ("zb. 3405")

was ist wenn sich die pid des programms nach jedem start ändert??
wie kann ich die nach jedem start neu raussuchen lassen?

.................
und Achat...danke hat mir sehr geholfen :d
05/12/2012 21:58 Freddy​#52
Quote:
Originally Posted by mo.tennis View Post
so nächste frage :D

ehhm wenn ich einen porcess mit ProcessClose beenden will geb ich ja die pid an also :
ProcessClose ("zb. 3405")

was ist wenn sich die pid des programms nach jedem start ändert??
wie kann ich die nach jedem start neu raussuchen lassen?

.................
und Achat...danke hat mir sehr geholfen :d
$PID = ProcessExists("Prozess.exe")
05/12/2012 21:59 omer36#53
Quote:
Originally Posted by mo.tennis View Post
so nächste frage :D

ehhm wenn ich einen porcess mit ProcessClose beenden will geb ich ja die pid an also :
ProcessClose ("zb. 3405")

was ist wenn sich die pid des programms nach jedem start ändert??
wie kann ich die nach jedem start neu raussuchen lassen?

.................
und Achat...danke hat mir sehr geholfen :d
Quote:
The name or PID of the process to terminate.
ProcessClose ("firefox.exe")
05/12/2012 22:02 mo.tennis#54
das von omer36 hatte ich schon ausprobiert..werde jetzt das von FReddy ausprobieren



Edit:
Freddy was muss ich ejtzt genau schreiben?? ich hab jetzt:


vorher sah es so aus

05/12/2012 22:17 Lawliet#55
Quote:
Originally Posted by mo.tennis View Post
das von omer36 hatte ich schon ausprobiert..werde jetzt das von FReddy ausprobieren



Edit:
Freddy was muss ich ejtzt genau schreiben?? ich hab jetzt:


vorher sah es so aus

Code:
While 1
		$PID = ProcessExists("RegClean Pro")
		ProcessClose ($PID)

WEnd
Denke aber, du musst "RegClean Pro.exe" schreiben.
05/13/2012 03:27 KDeluxe#56
Wenn es sich um den Fenstertitel handelt könnte
Code:
WinClose("RegClean Pro")
evtl. ausreichen.
05/13/2012 14:47 Lawliet#57
Kennt jemand zufällig eine Möglichkeit, in Files abschnitte zu löschen? Also etwa Zeichen 100-200 von 1000. Das File sollte nicht in den Arbeitsspeicher geladen werden, da es sehr groß sein kann.
FileReadLine sollte auch nicht verwendet werden, da kein Umbruch vorhanden ist.
05/13/2012 16:53 Njahs#58
Quote:
Originally Posted by Lawliet! View Post
Kennt jemand zufällig eine Möglichkeit, in Files abschnitte zu löschen? Also etwa Zeichen 100-200 von 1000. Das File sollte nicht in den Arbeitsspeicher geladen werden, da es sehr groß sein kann.
FileReadLine sollte auch nicht verwendet werden, da kein Umbruch vorhanden ist.

Hoffe ist das, was du wolltest ^^
05/13/2012 17:04 Achat#59
Quote:
Originally Posted by KDeluxe View Post
Wenn es sich um den Fenstertitel handelt könnte
Code:
WinClose("RegClean Pro")
evtl. ausreichen.
Code:
Opt('WinTitleMatchMode',2)
ProcessClose(WinGetProcess('RegClean Pro'))
;Für weitere Informationen F1 drücken oder fragen ;)
MfG


EDIT

Quote:
Originally Posted by Njahs View Post

Hoffe ist das, was du wolltest ^^
Wenn du das File vorher mit FileOpen öffnest und mit FileClose schließt, werden große Dateien sehr viel schneller gelesen.

Quote:
Originally Posted by HelpFile
If a filename is given rather than a file handle - the file will be opened and closed during the function call - for parsing large text files this will be much slower than using filehandles.
MfG
05/13/2012 17:13 Lawliet#60
Quote:
Originally Posted by Achat View Post
Code:
Opt('WinTitleMatchMode',2)
ProcessClose(WinGetProcess('RegClean Pro'))
;Für weitere Informationen F1 drücken oder fragen ;)
MfG


EDIT



Wenn du das File vorher mit FileOpen öffnest und mit FileClose schließt, werden große Dateien sehr viel schneller gelesen.



MfG
1-x Gigabyte aber nicht :p
_ReplaceStringinFile() schau ich mir an, danke :)