String-Verarbeitung (case)

Hi @ll,

ich brauch hier wohl mal einen richtigen PHP-Crack:

ich versuche einen über die Register-Variable empfangegen String auszuwerten. Der auszuwertende String hat das Format „SBx“, wobei x= „L“,„R“ oder " " sein kann. Abhängig vom Wert an der 3. Position sollen 3 unterschiedliche Variablen mit Werten befüllt werden.
Nun schreibt diese bl*** Script aber alle 3 unterschiedlichen Werte in die erste Variable (unten stehender Script-Schnipsel). Offensichtlich kann das Script nicht damit umgehen, das in einer der drei Ausprägungen statt „L“ oder „R“ ein " " (Leerzeichen) enthalten ist.
Kann mir hier jemand einen Tipp geben wie ich das so hinbiege dass die 3 Ausprägungen erkannt und unterschiedlich behandelt werden?
(ich bin am verzweifeln, such nu schon seit Tagen heul)


case "SB":
				$case = substr($data,2,3);
				//$case = str_pad( $case, 3, ' ', STR_PAD_LEFT;
				echo "Case-Wert = #$case#";
				if ($case = 'SBL')
				{
					$item = "ChannelVolumeSBL";
					$vtype = 1;
					$itemdata=substr($data,6,2);
					echo "itemdata $itemdata /n";
					$itemdata = str_pad( $itemdata, 2, 0, STR_PAD_RIGHT);
					$value = (intval($itemdata)) -50;
					DenonSetValue($item, $value, $vtype);
					echo "SBL Wert = $value /n";
				}
				elseif ($case = 'SBR')
				{
					$item = "ChannelVolumeSBR";
					$vtype = 1;
					$itemdata = substr($data,6,2);
					$itemdata = str_pad( $itemdata, 2, 0, STR_PAD_RIGHT);
					$value = (intval($itemdata)) -50;
					DenonSetValue($item, $value, $vtype);
				}
				elseif ($case = 'SB ')
				{
					$item = "ChannelVolumeSB";
					$vtype = 1;
					$itemdata = substr($data,5,2);
					$itemdata = str_pad( $itemdata, 2, 0, STR_PAD_RIGHT);
					$value = (intval($itemdata)) -50;
					DenonSetValue($item, $value, $vtype);
				}
			break;

klassischer fall für doppelte istgleich

if ($case == 'SBL') 

Gruß

aaaarrrrgggghhhh…ich brech ins Essen!:mad::mad::mad:
kaum macht man’s richtig funktionierts auch noch.

Danke Dir, ich denke ich hab heut aureichend für eure Bespaßung gesorgt (der berühmte Wald und die Bäume)

Yepp. Haste! :D:D:D

grrr…
deine Rüsselseuche scheint wech zu sein?!


case "SB":
	$case = substr($data,2,3);
	echo "Case-Wert = #$case#";
	$item = "ChannelVolume".$case;
	$vtype = 1;
	if($case=="SB")
		$itemdata = substr($data,5,2);
    else
    	$itemdata = substr($data,6,2);

    echo "itemdata $itemdata /n";
    $itemdata = str_pad( $itemdata, 2, 0, STR_PAD_RIGHT);
    $value = (intval($itemdata)) -50;
    DenonSetValue($item, $value, $vtype);
    echo $case." Wert = $value /n";

break;  
            
 

oh man, sysrun - ich habs befürchtet:
Deine Script-Schnipsel sind so dermassen verdichtet (und effizient) dass ich die nicht verstehe (zumindest nicht nach den ersten 5 Versuchen)… ich staune immer wieder (hatte ich doch auch irgendwann schon mal erwähnt, oder?)
:wink:

Naja, hab keine AHnung ob das Script funktioniert. :wink:

Mir ist nur aufgefallen das sämtliche Codeblöcke nach den "elseif"s eigentlich immer die selben Befehle ausführen. Das kann man doch so schön zusammenfassen :smiley:

ja, du hast vollkommen Recht. Ich bin noch nicht so fit in Sachen Programmierung und fang bei solchen Sachen erstmal Stück für Stück an. Wenn dann die Gesamtfunktionalität klar ist und auch funktioniert dann dampfe ich das ein (wenn ich Zeit, Lust und das passende KnowHow habe).
Daher sind mir Deine Beispiele immer sehr lieb weil man hier schön sehen kann wie man sowas effizienter machen kann.

dito

Zum Lesen sind zwar die ausführlichen Sachen besser aber auch ich finde die Inspiration durch die verbesserten Scripte einfach klasse. So langsam komme ich dadurch auch wieder rein in den Stoff.