chrizz-at
Goto Top

Informationen aus Zeichenkette in PHP auslesen

Liebe leute! Ich muss aus der Zeichenkette: Client-2.0.1.1820-RC-32_Serial.exe
mittels PHP auslesen:

Name: Client
Release: RC oder Final
Version: 2.0.1.1820
Bit: 64 oder 32
Serial: Seriennummer (immer 25 zeichen) (Statt _Serial)

Wobei sich die Zeichen immer ändern können zb. 32 und 64 bit und RC und Final.. aber der Dateiname ist immer so aufgebaut. Der Serial hat immer 25 Zeichen.

Wenn sich die anzahl der punkte im dateinamen verändert soll abgebrochen werden.

Wer kann mir helfen?!

$name = 'Client-2.0.1.1820-RC-32_Serial.exe';  


und dann?! Bin ein blutiger anfänger das einzige was ich kenne ist strpos() Und strlen()..

Content-Key: 101308

Url: https://administrator.de/contentid/101308

Printed on: April 19, 2024 at 12:04 o'clock

Member: kugelschreiber
kugelschreiber Nov 07, 2008 at 13:01:01 (UTC)
Goto Top
Wie waere es mit ein paar mehr String-Funktionen:

Alle zu finden unter: www.php.net

Zu Deinem Beispiel:

<?
$string = "Client-2.0.1.1820-RC-32_55555555.exe";  
$name = substr($string,0,strpos($string,"-"));  
$pos_start 	= strpos($string,"-")+1;  
$pos_ende = strrpos($string,"_");  
$version = substr($string,$pos_start,$pos_ende-$pos_start );
$release = strstr($string, 'RC') ? "RC" : "Final";  
$bit = strstr($string, '64_') ? '64' : '32';  
$serial = substr($string,strpos($string,"_")+1,-4);  
echo "name: ".$name."<br>";  
echo "version: ".$version."<br>";  
echo "release: ".$release."<br>";  
echo "bit: ".$bit."<br>";  
echo "serial: ".$serial."<br>";  
?>

Try it.
Ich habe keinen farbigen Editor hier, so bitte pruefe die Syntax auf richtige Schreibweise. Die verwendeten Funktionen sind alle auf php.net erklaert.Zum Beispiel: http://uk.php.net/manual/de/function.strripos.php

Gruss aus England Kuli
Member: chrizz-at
chrizz-at Nov 09, 2008 at 14:35:10 (UTC)
Goto Top
Ich danke dir für deine rasche Antwort Kuli! Ich werde es am Montag gleich ausprobieren!

Ich danke dir recht herzlich!

lg chris
Member: chrizz-at
chrizz-at Nov 10, 2008 at 07:56:26 (UTC)
Goto Top
Das Script bringt mir folgenden Fehler:

Fatal error: Function name must be a string in C:\xampp\htdocs\test\uploadFile.php on line 4

face-sad
Member: kugelschreiber
kugelschreiber Nov 10, 2008 at 16:31:46 (UTC)
Goto Top
Sorry Chrizz,

aber wie gesagt ich hatte oben gerade keinen ordentlichen Editor zur Hand.
Konnte das Script jetzt testen und bei mir hats gegeht.
Habe es oben gleich geändert und noch ein bisschen modifiziert.

Gruß und viel Spaß
Member: Enclave
Enclave Nov 11, 2008 at 15:03:30 (UTC)
Goto Top
Oder du machst es einfach mit Regulären Ausdrücken

<?php
$string = "Client-2.0.1.1820-RC-32_Serial.exe";  

if(!preg_match('~^Client-([0-9.]+)-([a-zA-Z]+)-([2-6]{2})_(.*)\.exe$~', $string, $einzeln))  
	die("Dumm gelaufen...");  

echo $einzeln[1];	//*** 2.0.1.1820
echo $einzeln[2];	//*** RC
echo $einzeln[3];	//*** 32
echo $einzeln[4];	//*** SERIALSERIALSERIALSERIAL$ 

?>

Hier das Ergebnis --> http://regexp-evaluator.de/evaluator/a89373ed619bb9accc47ff765eac7f29/# ...

Mfg

Enclave
Member: kugelschreiber
kugelschreiber Nov 11, 2008 at 21:51:11 (UTC)
Goto Top
Respekt.
Man(n) lernt eben nie aus und viele Wege führen ja nach Rom.
Allerdings habe ich noch eine Frage. Warum stehen nach der Prüfung mit preg_match() die Ergebnisse in einem Arrray?

Gruß Kuli
Member: Enclave
Enclave Nov 11, 2008 at 21:57:21 (UTC)
Goto Top
In regulären Ausdrücken kann man in Klammern eingeschlossene Bereiche zusammenfassen.
Und da es am einfachsten ist die in ein Array zu packen statt in viele einzelne Variablen gibt es einfach als dritten Parameter "Treffer". Diese werden dann in Reihenfolge ihres Auftretens in das Array geschrieben...

PHP Manuell

Mfg

Enclave
Member: kugelschreiber
kugelschreiber Nov 12, 2008 at 06:13:25 (UTC)
Goto Top
Sauber!

Sehr gute Arbeit! Nur die regulären Ausdrücke zu verstehen, dass man sie aus dem Kopf selber schreiben kann, ist ganz schon hart am Anfang.

Danke und scheen tach noch, wie man bei uns saacht.

Gruß Kuli
Member: chrizz-at
chrizz-at Nov 19, 2008 at 16:05:14 (UTC)
Goto Top
Hey leute! Ich bins nochmal!

Ich habe folgende aufgabe bekommen! (In den kommentaren steht was die funktion usw. machen muss..)

Ich komme aber dabei nicht weiter.. Hilfe!! face-sad


<?
$filename = 'Client-2.0.1.1820-RC-64_Serial.exe';  
$fname = substr($filename, 0, -4);

$bs = strpos($filename, '-');  
$us = strpos($filename, '_');  
$pt = strpos($filename, '.');  

if ($us === true) {
	$serial		= substr($filename, $us+1, 9999);
	$filename	= substr($filename, 0, -4);		// filename = Client-2.0.1.1820-RC-64
}

if ($bs === false) {		// kein - im FileName
		$name	= $filename;
}

else if ($bs === true) // kommt auch - vor -> 
	{ 
	$name		= substr($filename, 0, $bs);
	$filename	= substr($filename, $bs, 9000);	// Testen sonst mit length .... ist der Rest
	
	// hier ist Filename ohne name, ohne exe ohne serial
	
	$bs	= strpos($filename, '-');  // - suchen  
	while ($bs === true) {
		$part = substr($filename, 0, $bs-1);
		$filename	= substr($filename, $bs+1, 9999);
		
		ProcessPart($part);
		
		$bs	= strpos($filename, '-');		// nächsten - suchen  
	}
	// am schluss steht der letzte part in $filename drinnen
	ProcessPart($filename);
}

function ProcessPart($part) {
	global $release, $build, $bit;
	
	if (strpos($part, '.') === true)  
	{
	$part = 'build'; // build  
	}
	else if (strstr($part, '32') === true)  
	{
	$part = '32'; // bit  
	}
	else
	{
	$part = 'RC'; // release  
	}
	
	// wenn . vorkommt -> build, sonst 32 oder 64 -> bit, sonst Release
}

echo $filename;
echo $part;
?>