| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

07-08-2008, 01:30
|
|
salim_aliya
Registrierter Benutzer
|
|
Registriert seit: Nov 2007
Ort: Berlin
Beiträge: 53
|
|
Zeichenkette aus String rausfischen
Hi Leute,
habe hier ein kniffliges Problem und hoffe auf Hilfe
Also zum Problem:
Ich habe eine SQL datei, aus der ich gerne den genutzten Prefix der darin gespeicherten tabellen herausfinden möchte. In dieser SQL Datei haben alle Tabellen den selben prefix.
Meine Frage ist: Wie kann ich mittels PHP diesen Prefix ermitteln?
Mein bisheriger Ansatz war substr zu nutzen, doch je nachdem wo die Datenbank exportiert wurde nutzt mir substr nichts, weil die anzahl der der zu wegfallenden Zeichen verschieden sein kann, da dieses ja in mitten einer Zeile mit vielen anderen Zeichen kommt.
Wenn ich eine Tabelle habe die z.B. so heißt:
123456_abcdef
wie kann ich aus der dann das "123456" herrausschneiden, unzwar unabhängig davon, wieviele Zeichen es hinter und vor diesem Tabellen Namen gibt?
Hätte da einer einen Lösungsanatz?
Für etwaige Hilfe danke ich jetzt schon im vorraus!
Danke!
__________________
MFG
salim_aliya
Lesen, lernen, ausüben und Ziele erreichen...
|

07-08-2008, 02:06
|
|
asp2php
Banned
|
|
Registriert seit: Feb 2004
Beiträge: 11.746
|
|
mit RegEx, z.B. preg_match
|

07-08-2008, 03:27
|
|
Blackgreetz
PHP Junior
|
|
Registriert seit: Oct 2005
Beiträge: 901
|
|
Warum nicht einfacher ein explode bei "_" ?
..oder hab ich was überlesen?
mfg
|

07-08-2008, 08:31
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Hast du den Tabellennamen denn schon aus dem SQL-Skript extrahiert? Da ist das Präfix-ermitteln ja wohl der einfachere Teil, oder nicht?
|

07-08-2008, 09:42
|
unset
 Moderator
|
|
Registriert seit: Jan 2007
Ort: Düsseldorf
Beiträge: 3.778
|
|
Hier ist explode die richtige Wahl, was das eigentliche Problem angeht. Das Konzeptionelle Problem sollte allerdings auch gelöst werden
|

07-08-2008, 12:07
|
|
salim_aliya
Registrierter Benutzer
|
|
Registriert seit: Nov 2007
Ort: Berlin
Beiträge: 53
|
|
Hallo,
Danke für bisherige Antworten. Leider bin ich nicht weitergekommen.
Probieren wir es doch andersherum:
Wir lesen die SQL datei in ein Array ein und gehen mit foreach jede Zeile durch. Bei jeder Zeile prüfe ich mit preg_match() ob "_abcdef'" vorhanden ist. Der Tabellen Name steht zwischen zwei Aposthrophen, d.h. man könnte, wenn man mit preg match was gefunden hat, die Zeichen hinter dem "_abcdef" Abfragen, solange, bis ein Apostroph kommt.
Tabellen Name: "123456_abcdef"
Mit Pregmatch wird "_abcdef" gesucht
Und danach falls gefunden wurde, die Zeichen hinter diesem Fund Abfragen bis ein Apostroph kommt. In diesem Fall müsste dann als Endergebniss "123456" rauskommen.
Frage: Ist das möglich? Welche Ansätze gäbe es dafür?
Danke im Vorraus.
__________________
MFG
salim_aliya
Lesen, lernen, ausüben und Ziele erreichen...
|

07-08-2008, 12:10
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Ja, mit preg_match ist das möglich. Immernoch!
|

07-08-2008, 12:26
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Warum so kompliziert? Suche doch nach dem Literal "create table" und dahinter muss dann recht bald der Tabellenname kommen. Was, wenn mein Präfix mal "foo_bar__" ist? Das würdest du jetzt nicht erkennen. Darum ist es wahrscheinlich besser, du extrahierst erst einmal alle Tabellennamen und suchst dir die größte übereinstimmende Zeichenkette in allen Elementen.
|

07-08-2008, 12:43
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Wir wissen aber gar nicht, ob sein SQL-File überhaupt CREATE-Statements enthält. Wenn dem so ist, sollte er natürlich danach suchen. Möglicherweise hat er aber nur SELECTs, INSERTs oder sonstwas. Da wirds dann schon schwieriger, weil diese Statements komplizierte Grammatiken haben.
Ich nehme an, der TO hat den Tabellennamen gar nicht aus dem File heraus geparst sondern kennt ihn einfach, bspw. weil es um eine bestimmte Applikation mit festverdrahteten Tabellennamen geht. In diesem Zusammenhang wüßte ich gern, warum er den Präfix überhaupt wissen möchte, also woher die Problemstellung stammt.
|

07-08-2008, 14:15
|
|
salim_aliya
Registrierter Benutzer
|
|
Registriert seit: Nov 2007
Ort: Berlin
Beiträge: 53
|
|
Hi all,
Ich habe das problem gelöst, ich schenke euch das script als opensource ware
PHP-Code:
<?php
$SQLfile = file("1.sql");
foreach($SQLfile as $SQLsentense)
{
if(preg_match('/_about`/', $SQLsentense))
{
if(substr_count($SQLsentense, "`") == 2)
{
$anzahl = strlen($SQLsentense);
for($count = 0; $count < $anzahl; $count++)
{
if($SQLsentense[$count] == "`")
{
if($Zahlen[0] == '')
{
$Zahlen[0] = $count + 1;
}
elseif($Zahlen[1] == '')
{
$Zahlen[1] = $count + 1;
}
if($Zahlen[0] != '' and $Zahlen[1] != '')
{
$substr2 = $anzahl - ($Zahlen[1] - 7);
$substr2 = "-".$substr2;
echo substr($SQLsentense, $Zahlen[0], $substr2)."<br>";
unset($Zahlen);
}
}
}
}
}
}
?>
Vielen dank euch allen!!
__________________
MFG
salim_aliya
Lesen, lernen, ausüben und Ziele erreichen...
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|