StringBetween --- Problem-Need Help ^^

11/14/2010 20:03 ZaZiZu#16
Quote:
Originally Posted by Fab1an View Post
So kriegst du deine gewünschten Zeiten ;)

Code:
#include <Array.au3>

$sString = 'rackElement[1] = new product(1, "Getreide", 325,"getreide",2,1200000,"00:20:00&nbsp;h",1,2,1,0,"v");rackElement[5] = new product(5, "Futterrüben", 360,"futterrueben",3,7200000,"02:00:00&nbsp;h",1,2,2,0,"v");rackElement[6] = new product(6, "Kräuter", 1080,"kraeuter",4,14400000,"04:00:00&nbsp;h",1,2,2,0,"v");rackElement[8] = new product(8, "Kornblumen", 160,"kornblume",5,57600000,"16:00:00&nbsp;h",1,2,2,0,"v");rackElement[9] = new product(9, "Eier", 1330,"eier",1,14400000,"04:00:00&nbsp;h",1,1,1,0,"e");rackElement[10] = new product(10, "Milch", 1024,"milch",4,43200000,"12:00:00&nbsp;h",1,1,1,0,"e");rackElement[11] = new product(11, "Wolle", 560,"wolle",5,86400000,"24:00:00&nbsp;h",1,1,1,0,"e");rackElement[12] = new product(12, "Honig", 320,"honig",10,172800000,"48:00:00&nbsp;h",1,1,1,0,"e");rackElement[18] = new product(18, "Gurken", 759,"gurke",3,5400000,"01:30:00&nbsp;h",1,1,1,0,"v");rackElement[20] = new product(20, "Erdbeeren", 41115,"erdbeere",5,28800000,"08:00:00&nbsp;h",1,1,1,0,"v");rackElement[21] = new product(21, "Tomaten", 80,"tomate",5,36000000,"10:00:00&nbsp;h",1,1,1,0,"v");rackElement[22] = new product(22, "Zwiebeln", 1200,"zwiebel",4,30000000,"08:20:00&nbsp;h",1,1,1,0,"v");rackElement[23] = new product(23, "Spinat", 1080,"spinat",4,48000000,"13:20:00&nbsp;h",1,1,1,0,"v");rackElement[24] = new product(24, "Blumenkohl", 1080,"blumenkohl",4,43200000,"12:00:00&nbsp;h",1,1,1,0,"v");rackElement[26] = new product(26, "Kartoffeln", 1080,"kartoffel",4,46800000,"13:00:00&nbsp;h",1,1,1,0,"v");rackElement[27] = new product(27, "Käse", 194,"kaese",15,120000000,"33:20:00&nbsp;h",1,1,1,0,"e");rackElement[29] = new product(29, "Spargel", 540,"spargel",4,57000000,"15:50:00&nbsp;h",1,2,1,0,"v");rackElement[31] = new product(31, "Zucchini", 1080,"zucchini",7,60000000,"16:40:00&nbsp;h",1,1,1,0,"v");rackElement[32] = new product(32, "Heidelbeeren", 12305,"heidelbeere",4,43200000,"12:00:00&nbsp;h",1,1,1,0,"v");rackElement[91] = new product(91, "Zierfisch", 20,"fisch",4,172800000,"48:00:00&nbsp;h",1,1,1,0,"e");rackElement[92] = new product(92, "Fischfutter", 9,"fisch",4,10000000,"02:46:40&nbsp;h",1,1,1,1,"e");'

$aRes = StringRegExp($sString,'new product\((?:[^,]+,){6}"(.+?)&[^\)]+\)',3)
_ArrayDisplay($aRes)
Aah, big THX :) ist sogar fast das was ich wollte :D
Die Auflistung bringt mir nix, ich brauch die Zahlen so zur Hand, dass ich die nach den Kennziffern, wie die da in Klammern sind, rauspicken kann.
Wenn diese Auflistung universell wääre, könnte ich es dann noch schaffen, aber da diese sich von acc zu account unterscheidet wirds so nix :(
11/14/2010 20:27 Fab1an#17
Also für Getreide willst du die Zeit mit der Zahl 325 herauspicken oder welche Zahl ist gemeint?

Code:
rackElement[1] = new product(1, "Getreide", 325,"getreide",2,1200000,"00:20:00&nbsp;h",1,2,1,0,"v")
11/14/2010 20:52 ZaZiZu#18
Quote:
Originally Posted by Fab1an View Post
Also für Getreide willst du die Zeit mit der Zahl 325 herauspicken oder welche Zahl ist gemeint?

Code:
rackElement[1] = new product(1, "Getreide", 325,"getreide",2,1200000,"00:20:00&nbsp;h",1,2,1,0,"v")
Nein, jedes Produkt ist nummeriert mit der Zahl in den [] ^^ also Getreide wäre 1, Heidelbeeren 32, Zucchini 31, Kräuter 6, usw. ... Die 325 ist die Anzahl, die man auf Lager hat ^^
Hab es grad geschafft *juhuu*, auch wenn es sicherlich kürzer geht ^^
PHP Code:
Dim $test
Dim $test 
_StringBetween($sHTML'= new product('&GUICtrlRead($Input2)&',''"v")')
$timeStringRight($test[0], 20
$time2StringLeft($time8

MsgBox(0"test"$time2
Der fehler im 1ten Versuch war offensichtlich wegen diesem " nbsp ", das immer zwischendurch war. komischerweise wird es da nicht rausgelesen oder gibt fail, weil es schon vorher vorhanden war (tippe eher auf das 1te, da es mit stringright so rauskam :D)

Bin für weitere Vorschläge offen ^^
Deins sieht ziemlich kompliziert aus, aber man kann das sicherlich auch so mit den zahlen aufteilen

Mal was ähnliches:
Könntest du mit dieser Formel es so schaffen, dass du diese Produktnummer und den Produktnamen in ein Array packen kannst?
Also damit ich so eine ganze Auflistung habe z.B.
Quote:
1=Getreide
6=Kräuter
...
32=Heidelbeeren
11/14/2010 21:15 Fab1an#19
Aber klar :)

Die Funktion _RegExp ist aber nicht von mir sondern von SEuBo aus autoit bot.de
Code:
#include <Array.au3>

$sString = 'rackElement[1] = new product(1, "Getreide", 325,"getreide",2,1200000,"00:20:00&nbsp;h",1,2,1,0,"v");rackElement[5] = new product(5, "Futterrüben", 360,"futterrueben",3,7200000,"02:00:00&nbsp;h",1,2,2,0,"v");rackElement[6] = new product(6, "Kräuter", 1080,"kraeuter",4,14400000,"04:00:00&nbsp;h",1,2,2,0,"v");rackElement[8] = new product(8, "Kornblumen", 160,"kornblume",5,57600000,"16:00:00&nbsp;h",1,2,2,0,"v");rackElement[9] = new product(9, "Eier", 1330,"eier",1,14400000,"04:00:00&nbsp;h",1,1,1,0,"e");rackElement[10] = new product(10, "Milch", 1024,"milch",4,43200000,"12:00:00&nbsp;h",1,1,1,0,"e");rackElement[11] = new product(11, "Wolle", 560,"wolle",5,86400000,"24:00:00&nbsp;h",1,1,1,0,"e");rackElement[12] = new product(12, "Honig", 320,"honig",10,172800000,"48:00:00&nbsp;h",1,1,1,0,"e");rackElement[18] = new product(18, "Gurken", 759,"gurke",3,5400000,"01:30:00&nbsp;h",1,1,1,0,"v");rackElement[20] = new product(20, "Erdbeeren", 41115,"erdbeere",5,28800000,"08:00:00&nbsp;h",1,1,1,0,"v");rackElement[21] = new product(21, "Tomaten", 80,"tomate",5,36000000,"10:00:00&nbsp;h",1,1,1,0,"v");rackElement[22] = new product(22, "Zwiebeln", 1200,"zwiebel",4,30000000,"08:20:00&nbsp;h",1,1,1,0,"v");rackElement[23] = new product(23, "Spinat", 1080,"spinat",4,48000000,"13:20:00&nbsp;h",1,1,1,0,"v");rackElement[24] = new product(24, "Blumenkohl", 1080,"blumenkohl",4,43200000,"12:00:00&nbsp;h",1,1,1,0,"v");rackElement[26] = new product(26, "Kartoffeln", 1080,"kartoffel",4,46800000,"13:00:00&nbsp;h",1,1,1,0,"v");rackElement[27] = new product(27, "Käse", 194,"kaese",15,120000000,"33:20:00&nbsp;h",1,1,1,0,"e");rackElement[29] = new product(29, "Spargel", 540,"spargel",4,57000000,"15:50:00&nbsp;h",1,2,1,0,"v");rackElement[31] = new product(31, "Zucchini", 1080,"zucchini",7,60000000,"16:40:00&nbsp;h",1,1,1,0,"v");rackElement[32] = new product(32, "Heidelbeeren", 12305,"heidelbeere",4,43200000,"12:00:00&nbsp;h",1,1,1,0,"v");rackElement[91] = new product(91, "Zierfisch", 20,"fisch",4,172800000,"48:00:00&nbsp;h",1,1,1,0,"e");rackElement[92] = new product(92, "Fischfutter", 9,"fisch",4,10000000,"02:46:40&nbsp;h",1,1,1,1,"e");'

$aRes = _RegExp($sString,'new product\((\d+),\s+?"(.+?)"[^\)]+\)')
_ArrayDisplay($aRes)

;By SEuBo (www.*************)
Func _RegExp($sTest, $sPattern, $iOffset = 0)
	Local $aRet, $iUB, $iUB2, $aDummy, $aNewArr
	$aRet = StringRegExp($sTest, $sPattern, 4, $iOffset)
	If @error Then Return

	Local $iUB = UBound($aRet), $iUB2 = UBound($aRet[0]), $aNewArr[$iUB][$iUB2 - 1]
	For $i = 0 To $iUB - 1
		Local $aDummy = $aRet[$i], $iUBD = UBound($aDummy)

		If $iUBD - 1 > $iUB2 Then
			$iUB2 = $iUBD
			ReDim $aNewArr[$iUB][$iUB2]
		EndIf
		For $j = 1 To $iUBD - 1
			$aNewArr[$i][$j - 1] = $aDummy[$j]
		Next
	Next
	Return SetError(0, $iUB, $aNewArr)
EndFunc   ;==>_RegExp
11/14/2010 22:04 lolkop#20
wenn du von nummer auf string schließen willst, geht das gaze auch besser, indem du jedem string, direkt die zugehörige zahl als index zuweist.

zb so:
Code:
$read = StringRegExp($string, 'new product\((\d+), "(.*?)".*?\)', 3)
Dim $product[$read[UBound($read)-2]+1]
For $i=0 To UBound($read)-2 Step 2
	$product[$read[$i]] = $read[$i+1]
Next
wenn du das ganze so gemacht hast, brauchst du nicht immer das gesamte array nochmal durchlaufen, sondern könntest direkt $product[$zahl] aufrufen...
$product[1] würde so zb "Getreide" ausgeben.

musst natürlich wissen was dir wichtiger ist, da du auf diesem weg einen höheren speicherverbrauch hast (ungenutzte array elemente). dafür hast du aber so deutlich schnellere und ressourcenschonende zugriffe, und kannst das ganze leichter aufrufen^^
11/14/2010 22:28 ZaZiZu#21
Ah, also hab ich jetzt eine Array, wo der Index gleich der Produktnummer ist :D? Thx, wird sicherlich irgendwo nützlich sein :)



Worin unterscheidet sich dieses _RegExp und StringRegExp ^^?