Zeichenkette aus String rausfischen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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...

  • #2
    mit RegEx, z.B. preg_match

    Kommentar


    • #3
      Warum nicht einfacher ein explode bei "_" ?

      ..oder hab ich was überlesen?

      mfg

      Kommentar


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

        Kommentar


        • #5
          Hier ist explode die richtige Wahl, was das eigentliche Problem angeht. Das Konzeptionelle Problem sollte allerdings auch gelöst werden
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            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...

            Kommentar


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

              Kommentar


              • #8
                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.

                Kommentar


                • #9
                  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.

                  Kommentar


                  • #10
                    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...

                    Kommentar

                    Lädt...
                    X