PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Zeichenkette aus String rausfischen (https://www.php-resource.de/forum/php-developer-forum/93285-zeichenkette-aus-string-rausfischen.html)

salim_aliya 07-08-2008 01:30

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!

asp2php 07-08-2008 02:06

mit RegEx, z.B. preg_match

Blackgreetz 07-08-2008 03:27

Warum nicht einfacher ein explode bei "_" ?

..oder hab ich was überlesen?

mfg

PHP-Desaster 07-08-2008 08:31

Hast du den Tabellennamen denn schon aus dem SQL-Skript extrahiert? Da ist das Präfix-ermitteln ja wohl der einfachere Teil, oder nicht?

unset 07-08-2008 09:42

Hier ist explode die richtige Wahl, was das eigentliche Problem angeht. Das Konzeptionelle Problem sollte allerdings auch gelöst werden ;)

salim_aliya 07-08-2008 12:07

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.

onemorenerd 07-08-2008 12:10

Ja, mit preg_match ist das möglich. Immernoch!

PHP-Desaster 07-08-2008 12:26

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.

onemorenerd 07-08-2008 12:43

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.

salim_aliya 07-08-2008 14:15

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!!


Alle Zeitangaben in WEZ +2. Es ist jetzt 11:41 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG