Splitten von Daten

Hallo,

ich stehe gerade auf dem Schlauch dabei kann das an sich wohl nicht so schwer sein.

Ich bekomme vom I/O Daten in der Form


string(181) ""PSDCO OFF\rPSDRC AUTO\rPSLFE 00\rPSBAS 50\rPSTRE 50\rPSTONE CTRL OFF\rPSRSTR OFF\rMSDOLBY PL2 C\rPSRSTR OFF\rPSDCO OFF\rPSDRC AUTO\rPSLFE 00\rPSBAS 50\rPSTRE 50\rPSTONE CTRL OFF\r""


Ich will jetzt einfach den String bei \r aufteilen und versuche das ohne Erfolg mit


$data = explode("\r", $dataio);

Da kommt dann das raus:


array(1) {
  [0]=>
  string(181) ""PSDCO OFF\rPSDRC AUTO\rPSLFE 00\rPSBAS 50\rPSTRE 50\rPSTONE CTRL OFF\rPSRSTR OFF\rMSDOLBY PL2 C\rPSRSTR OFF\rPSDCO OFF\rPSDRC AUTO\rPSLFE 00\rPSBAS 50\rPSTRE 50\rPSTONE CTRL OFF\r""
}

Hat jemand einen Tipp für mich wie ich String sauber in Einzelteile beim \r teile?

Zeig mal den Debug vom Socket.
Das sieht komisch aus mit doppelten " und wenn du \r in Klartext lesen kannst, schein es erstmal kein Steuerzeichen zu sein.
Hast du daran gedacht das du Daten vom Socket (Feld Buffer) mit UTF8_decode behandeln musst ?
Michael

Hm ja irgendwo habe ich da wohl einen Denkfehler.

Also das was reinkommt sieht so aus

Das geht dann an den Splitter. Um zusehen was ankommt schreibe ich Behelfsmäßig die Daten in eine String Var, das ist das was Du oben siehst. Eigentlich will ich den Inhalt aber aufteilen und den Array dann an eine Funktion übergeben. Die Funktion funktioniert aber eben leider nicht da das was reinkommt nicht in einen Array gesplittet wird.


public function ReceiveData($JSONString)
	{
	 
		// Empfangene Daten vom I/O
		$payload = json_decode($JSONString);
		$dataio = json_encode($payload->Buffer);
		SetValueString($this->GetIDForIdent("IOIN"), $dataio);
		$data = explode("\r", $dataio);
		
		array_pop($data);
		$APIData = new DenonAVRCP_API_Data();
		$APIData->Data = $data;
		$SetCommand = $APIData->GetCommandResponse($APIData->Data);
		$message = json_encode($SetCommand);
		SetValueString($this->GetIDForIdent("BufferIN"), $message);
			 
		// Weiterleitung zu allen Gerät-/Device-Instanzen
		$this->SendDataToChildren(json_encode(Array("DataID" => "{7DC37CD4-44A1-4BA6-AC77-58369F5025BD}", "Buffer" => $SetCommand))); //Denon Telnet Splitter Interface GUI
	}


Auch wenn es nicht die Lösung ist, das hier ist eigentlich zu viel:


        $dataio = json_encode($payload->Buffer); 

Evtl. hat er dann auch ein JSON Object womit explode nicht klar kommt?

paresy

Danke Euch beiden. Das gab mir den Denkanstoß um es zu lösen.


public function ReceiveData($JSONString)
	{
	 
		// Empfangene Daten vom I/O
		$payload = json_decode($JSONString);
		$dataio = $payload->Buffer;
		SetValueString($this->GetIDForIdent("IOIN"), $dataio);
		$data = preg_split('/\r/', $dataio);
		array_pop($data);
		$APIData = new DenonAVRCP_API_Data();
		$APIData->Data = $data;
		$SetCommand = $APIData->GetCommandResponse($APIData->Data);
		$message = json_encode($SetCommand);
		SetValueString($this->GetIDForIdent("BufferIN"), $message);
			 
		// Weiterleitung zu allen Gerät-/Device-Instanzen
		$this->SendDataToChildren(json_encode(Array("DataID" => "{7DC37CD4-44A1-4BA6-AC77-58369F5025BD}", "Buffer" => $SetCommand))); //Denon Telnet Splitter Interface GUI
	}

Ich nutzte jetzt


$data = preg_split('/\r/', $dataio);

und lasse das


$dataio = json_encode($payload->Buffer);  

weg.

jetzt bekomme ich TADA:D


array(14) {
  [0]=>
  string(9) "PSDCO OFF"
  [1]=>
  string(10) "PSDRC AUTO"
  [2]=>
  string(8) "PSLFE 00"
  [3]=>
  string(8) "PSBAS 50"
  [4]=>
  string(8) "PSTRE 50"
  [5]=>
  string(15) "PSTONE CTRL OFF"
  [6]=>
  string(10) "PSRSTR OFF"
  [7]=>
  string(15) "MSDOLBY DIGITAL"
  [8]=>
  string(9) "PSDCO OFF"
  [9]=>
  string(10) "PSDRC AUTO"
  [10]=>
  string(8) "PSLFE 00"
  [11]=>
  string(8) "PSBAS 50"
  [12]=>
  string(8) "PSTRE 50"
  [13]=>
  string(15) "PSTONE CTRL OFF"
}

Alles gut, nur dumm das ich da jetzt erst nach Tagen darauf gekommen bin.