Ankündigung

Einklappen
Keine Ankündigung bisher.

zerstückeln eines strings

Einklappen

Neue Werbung 2019

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

  • Gast-Avatar
    Ein Gast erstellte das Thema zerstückeln eines strings.

    zerstückeln eines strings

    Hallo,

    ich habe einen string der folgendermaßen aussieht:

    Code:
    server_id=1 server_name=m4c4br3's place | #reihe5.de server_platform=Linux server_welcomemessage=-= welcome to my server =- visit http://reihe5.de server_webpost_linkurl= server_webpost_posturl= server_password=1 server_clan_server=1 server_udpport=8767 server_maxusers=35 server_allow_codec_celp51=0 server_allow_codec_celp63=0 server_allow_codec_gsm148=0 server_allow_codec_gsm164=0 server_allow_codec_windowscelp52=0 server_allow_codec_speex2150=-1 server_allow_codec_speex3950=-1 server_allow_codec_speex5950=-1 server_allow_codec_speex8000=-1 server_allow_codec_speex11000=-1 server_allow_codec_speex15000=-1 server_allow_codec_speex18200=-1 server_allow_codec_speex24600=-1 server_packetssend=7024813 server_bytessend=1506872761 server_packetsreceived=5159731 server_bytesreceived=862014289 server_uptime=4822236 server_currentusers=0 server_currentchannels=19 server_bwinlastsec=0 server_bwoutlastsec=0 server_bwinlastmin=0 server_bwoutlastmin=0 OK
    nun möchte brauche ich eine verschachtelte schleife, welche mir nacheinander alles ausgibt was mit server_ anfängt. Die Variable wo das alles drinn steht heisst $result.

    Bräuchte hier mal ein kleine Bespiel um das Ganze zu realisieren.

    Im script soll es hinterher folgendermaßen ausgegeben werden:

    Code:
    server_id=1
    server_name=m4c4br3's place | #reihe5.de
    server_platform=Linux
    server_welcomemessage=-= welcome to my server =- visit http://reihe5.de
    server_webpost_linkurl=
    server_webpost_posturl=
    server_password=1
    server_clan_server=1
    server_udpport=8767
    server_maxusers=35
    server_allow_codec_celp51=0
    server_allow_codec_celp63=0
    server_allow_codec_gsm148=0
    server_allow_codec_gsm164=0
    server_allow_codec_windowscelp52=0
    server_allow_codec_speex2150=-1
    server_allow_codec_speex3950=-1
    server_allow_codec_speex5950=-1
    server_allow_codec_speex8000=-1
    server_allow_codec_speex11000=-1
    server_allow_codec_speex15000=-1
    server_allow_codec_speex18200=-1
    server_allow_codec_speex24600=-1
    server_packetssend=7024813
    server_bytessend=1506872761
    server_packetsreceived=5159731
    server_bytesreceived=862014289
    server_uptime=4822559
    server_currentusers=0
    server_currentchannels=19
    server_bwinlastsec=0
    server_bwoutlastsec=0
    server_bwinlastmin=0
    server_bwoutlastmin=0
    OK
    am besten noch jede einzelne Zeile in ein Array shreiben um später darauf zurück greifen zu können.

    Danke schon mal im vorraus.

    Gruß m4c4br3

  • Gast-Avatar
    Ein Gast antwortete
    nach dem beispiel von spec kommt wieder der Fehler

    Warning: Unknown modifier '(' in /srv/www/htdocs/web4/html/ts2/test.php on line 18
    array(0) { }

    ich mach es jetzt anders... da die Anordnung der informationen immer gleich sind... werde ich für jede info eine eigene Variable nehmen... nach der entsprechenden info in dem string suchen lassen von dort an bis zum nächsten wort suchen dieses dann zählen lassen und von einander abzihen und den wert dann anzeigne lassen... funzt auf jeden fall...

    hier ein beispiel... ist zwar viel arbeit aber egal... bis schon seit stunden daran und hab kein nerv mehr *g* vielen dank für die ganzen bemühungen...

    PHP-Code:
    <?php
        $server_uptime 
    strstr($result"server_uptime");
        
    $next_i strstr($server_uptime"server_c");
        
    $ges_len = (strlen($server_uptime) - strlen($next_i));
        
    $ausgabe substr($server_uptime0,$ges_len);
        echo 
    $ausgabe;

    ?>
    und das dann halt für jede info...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    PHP-Code:
    <?php
        
    echo $result;
        
    preg_match_all('=server_(.*?)=(*.?)(\s*server|\s*)=',$result,$hits);
        
    var_dump($hits); 
    ?>
    Da fehlte ein =

    Einen Kommentar schreiben:


  • XLB
    antwortet
    Hä ???

    - explode() schreibt die Einzelteile in das Array "$StatX". Als Separator dient " server".

    - im foreach-Konstrukt wird jedes ArrayElement in eine separate Zeile geschrieben. (
    ). Da " server" durch das explode() weggeschnitten wurde, wird es hier wieder drangepappt.

    Wie bereits gepostet, hab den Code mitlerweile ausprobiert und dat Dingen macht genau das, was du willst ...

    @spec: als Ausgabe kommt genau das, was der Thread-Starter gerne hätte. Denk dir vor jedem "server" (ausser dem ersten) einen Zeilenumbruch :wink:

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    kann jm mal die ausgabe posten?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    der gibt zwar alles wieder... aber nicht untereinander sonder in einer reihe... bzw. will ich hinterher alles in ein array packen und hinterher einzeln auslesen können....

    z.B. wenn ich mir nur server_name=m4c4br3's place | #reihe5.de anzeigen lassen will oder z.B. wenn ic mir nur server_packetsreceived=5160171 anzeigen lassen will...

    weil sonst kann ich mir ja direkt die variable $result ausgeben lassen...

    Einen Kommentar schreiben:


  • XLB
    antwortet
    Hab den Code den du zuletzt gepostet hast mal ausprobiert - läuft tatdellos ...! Wo ist das Problem ?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    die meldung bekomm ich wenn ich es mit preg_match_all mache. nach deiner idee listet er mir immer noch den ganzen string ohne zeilenumbruch auf bzw. setzt nur das wort server einmal vor allem was bei echo 'server'.$S."..... steht

    Einen Kommentar schreiben:


  • XLB
    antwortet
    Hmm ...

    Was für einen Fehler bekommst du nun? Immer noch "Warning: Unknown modifier ..." oder sowas "parse error, unexpected T_STRING ..." ?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Am besten poste ich mal den kompletten code... evtl kommt dann mehr klarheit rein...

    PHP-Code:
    <?php
    $svip 
    "62.141.36.64";
    $tsport "51234";
    $svport "8767";
    $fp fsockopen($svip$tsport$errno$errstr);
    $listinfo "si";
    if (!
    $fp)
        {
        echo 
    "Fehler: $errno - $errstr
    \n"
    ;
        }
    else
        {
        
    fputs($fp$listinfo." ".$svport."\n");
        
    $serverinfo fscanf($fp"%s\n");
        
    $result fread($fp2048);
        
    //echo $result;
        //preg_match_all('=server_(.*?)=(*.?)(\s*server|\s*)',$result,$hits);
        //var_dump($hits);
        
    $StatX explode(' server_',$result);
        foreach (
    $StatX as $S)
            {
               echo 
    'server'.$S."
    \n"
    ;
            }

        }
    fputs($fp"quit");
    fclose($fp);

    ?>

    Einen Kommentar schreiben:


  • XLB
    antwortet
    Mal die Lösung ohne RegEx probiert ?

    Was steht in Zeile 17 und davor? Ist das die Zeile mit dem "preg_match_all()" ?

    Hast du den Gesamttext einer Variablen zugewiesen? Wenn ja (davon geh'ich mal aus), wie ? Der Text beinhaltet ein ' , was zu Problemen führen könnte, deswegen sollte die Zuweisung mit " erfolgen.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    theoretisch muss der sich doch nur jedes server_ raussuchen und 8 Zeichen davor einen Zeielnumbruch machen... oder ? nur wie macht man das ?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    sobald ich das einbau kommt folgender fehler:

    Warning: Unknown modifier '(' in /srv/www/htdocs/web4/html/ts2/test.php on line 17

    Einen Kommentar schreiben:


  • XLB
    antwortet
    Ohne RegEx:

    PHP-Code:
    <?php

    $StatX
    =explode(' server',$StatusStr);

    foreach (
    $StatX as $S)
    {

        echo 
    'server'.$S.'
    '
    ;

    }

    ?>
    ("$StatusStr" beinhaltet den Gesamtstring)

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    PHP-Code:
    <?php
    preg_match_all
    ('=server_(.*?)=(*.?)(\s*server|\s*)',$result,$hits);
    ?>
    jetzt kannste dir mit var_dump den inhalt von $hits ausgeben lassen

    Einen Kommentar schreiben:

Lädt...
X