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-ID: 101308

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

Ausgedruckt am: 26.11.2024 um 10:11 Uhr

kugelschreiber
kugelschreiber 07.11.2008 um 14:01:01 Uhr
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
chrizz-at
chrizz-at 09.11.2008 um 15:35:10 Uhr
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
chrizz-at
chrizz-at 10.11.2008 um 08:56:26 Uhr
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
kugelschreiber
kugelschreiber 10.11.2008 um 17:31:46 Uhr
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ß
Enclave
Enclave 11.11.2008 um 16:03:30 Uhr
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
kugelschreiber
kugelschreiber 11.11.2008 um 22:51:11 Uhr
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
Enclave
Enclave 11.11.2008 um 22:57:21 Uhr
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
kugelschreiber
kugelschreiber 12.11.2008 um 07:13:25 Uhr
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
chrizz-at
chrizz-at 19.11.2008 um 17:05:14 Uhr
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;
?>