Ergebnis 1 bis 7 von 7

Thema: != greift nicht ...

  1. #1
    vB-Guru Avatar von Tamara-Jasmin
    Registriert seit
    21.06.2010
    Ort
    Berchtesgaden
    Beiträge
    1.339

    != greift nicht ...

    Hi, ich habe jetzt verschiedene Variationen versucht.

    Hinweise: Alle Kopieschnipsel hier sind unvollständig und nicht abgesichert (htmlspecialchars usw...),
    Ich habe jetzt auch die letzten beiden Codeschnipsel ungetestet mal rein geschrieben - es geht mir nur um die Funktion, bei der ich scheinbar etwas übersehe ...

    Es existiert eine Datei "phrasen.oez", die folgenden Inhalt hat:

    Code:
    //Phrasen zu den einzelnen Ausgaben (Wochentage befinden sich in der Datei "zeiten.oez") 
     
     
    // Sonderfälle 
    notfall     || Wegen Notfall kurz geschlossen; 
    notfall_zeit|| 16:00 || Wir sind voraussichtlich um {$ph[notfall_zeit][1]} {$ph[uhr]} wieder für Sie da; 
    notfall_vmg || Wegen Notfall heute Vormittag geschlossen; 
    notfall_nmg || Wegen Notfall heute Nachmittag geschlossen; 
     
    messe       || 02.02.2018 || 04.02.2018 || Wegen Messe ist unser Geschäft von {$ph[messe][1]} bis {$ph[messe][2]} geschlossen; 
    //messe       || 04.02.2018 || Wegen Messe ist unser Geschäft am {$ph[messe][1]} geschlossen; 
     
    || Urlaub 
     
    urlaub      || 05.02.2018 || 18.02.2018 || Wir haben Urlaub vom {$ph[urlaub][1]} bis {$ph[urlaub][2]} 
     
    //Öffnungszeiten - Ausgabe: 
     
    offen       || Geöffnet; 
    geschlossen || Geschlossen; 
    o_zeiten    || Öffnungszeiten; 
    vm          || Vormittag; 
    nm          || Nachmittag; 
    m_pause     || Mittagspause; 
    rz_offen    || Wir haben noch {...} für Sie geöffnet; 
    g_mp        || Wir haben gerade Mittagspause; 
    g_mp_bo     || Wir haben gerade Mittagspause und öffnen in {...} für Sie; 
    //g_mp_bo     || Wir haben gerade Mittagspause und öffnen wieder um {....} ; 
     
    //Allgemeine Phrasen 
     
    uhr         || Uhr
    in dieser Datei habe ich bewusst Leerzeilen eingebaut, mehrere Leerzeichen und auch nur 1 Leerzeichen, um diese Zeilen später auszufiltern ,..


    Hier mal der Code wie es eigentlich funktionieren sollte:

    PHP-Code:
    function phraseneinlesen () { 
     
        
    $phrasen1 '../files/phrasen.oez'
        
    $phrasen_zeilen file($phrasen1); 
        
    $phrasen = array(); 
        foreach(
    $phrasen_zeilen as $index => $phrasen_tmp) { 
     
            if (
    substr($phrasen__tmp[0], 02) == '//' OR $phrasen_tmp[0] == '' OR $phrasen_tmp[0] == ' ') {} else { 
                
    $phrasen2 explode('||'$phrasen_tmp); 
                
    $phrasen[$phrasen_tmp[0]] = $phrasen2
            } 
        } 

    Hier mal die "erweiterte" Variante, die so ja auch funktioniert

    PHP-Code:
    $phrasen1 fopen("../files/phrasen.oez""r"); 
     
            while (
    $phrasen2 fgets ($phrasen11024 )) { 
     
                if (
    substr($phrasen202) != '//' OR $phrasen2 != '' OR $phrasen2 != ' ') { 
                    
    $phrasen_temp[] = explode("||"trim($phrasen2)); 
                } 
            } 
            
    fclose($phrasen1); 
     
                
    $arraylaenge max(array_keys($phrasen_temp)); 
     
            echo 
    $arraylaenge
     
                for (
    $i=0$i<$arraylaenge$i++) { 
     
                        
    $phrasen[trim($phrasen_temp[$i][0])] = $phrasen_temp[$i][0]; 
     
                    } 
    Mein Problem - beide Codes funktionieren soweit - aber DIESE ZEILE HIER:

    PHP-Code:
        if (substr($phrasen202) != '//' OR $phrasen2 != '' OR $phrasen2 != ' ') { 
    die greift rein gar nicht. Der Code dahinter wird IMMER ausgeführt!

    Interessanterweise funktioniert er umgekehrt mit z.B. if (sibstr($phrasen2, 0, 2) == '//' .... ).
    DANN werden tatsächlich NUR die Informationszeilen ausgegeben - was ja heisst, das er es erkennt.

    Was ich will:
    die obige Datei Phrasen wird bearbeitet (geändert). Hier kann es sein das beim Speichern (aus versehen) eine Leerzeile eingefügt wird, Leerzeichen usw.
    Gewisse Zeilen werden "ausgeblendet" mit "//". Diese sollen also erkannt - und gar nicht erst verarbeitet werden.
    Mir ist es ein absolutes Rätsel was ich hier übersehe.
    Da ich heute den dritten Tag - NUR an DIESER Zeile hänge und einfach nicht mehr weiter komme, einfach mal die Frage an euch ...

    Danke und Liebe Grüsse:
    Tammy
    Ein Hund ist treu - ein Hund ist ehrlich -
    der Mensch dagegen sehr beschwerlich
    (Tamara-Jasmin 04.2011 - Forum privat - nicht öffentlich zugänglich)



  2. #2
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    42
    Beiträge
    2.159
    Blog-Einträge
    1
    Ein bisschen Logik
    Code:
    ! ( a && b ) ist äquivalent zu !a || !b 
    ! ( a || b ) ist äquivalent zu !a && !b
    Was ich damit sagen will. Mach in deiner obigen Zeile aus den OR's einfach AND's und dann sollte es klappen oder setze den Code der funktioniert hatte mit den == einfach in !(...).
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

  3. #3
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    42
    Beiträge
    2.159
    Blog-Einträge
    1
    Hab mal selbst schnell was gebastelt, ich schreib jetzt lieber nicht, wie lange ich gebraucht hatte. ;-)

    PHP-Code:
    $fileName "../files/phrasen.oez";

    $phrasenArrayFromFile file($fileNameFILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);

    $phrasenAusgabe = []; // oder = array() für ältere PHP-Versionen

    foreach($phrasenArrayFromFile As $line)
    {
        
    $line trim($line);

        if(empty(
    $line))
        {
            continue; 
    // diesen foreach-Durchlauf verlassen und zum nächsten
        
    }

        if(
    substr($line02) == '//')
        {
            continue;
        }

        list(
    $key$value) = explode('||'$line2); // 2 = nur 2 Werte zulassen

        
    $key trim($key);

        
    $value trim($value);
        
    $value rtrim($value';'); // Semikolon löschen am Ende

        
    if(!(empty($key) OR empty($value))) // falls leeres $value erlaubt, entsprechend ändern
        
    {
            
    $phrasenAusgabe[$key] = $value;
        }

    - - - Aktualisiert - - -

    Zitat Zitat von Tamara-Jasmin Beitrag anzeigen

    PHP-Code:
    $arraylaenge max(array_keys($phrasen_temp)); 
    Das nenne ich mal kreativ. ;-)

    Schau dir mal count() bzw. sizeof() an. :-)
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

  4. #4
    vB-Guru Avatar von Tamara-Jasmin
    Registriert seit
    21.06.2010
    Ort
    Berchtesgaden
    Beiträge
    1.339
    Klasse !! Danke Dir ! Ich weiss das wirklich zu schätzen!

    Bin auch derzeit nur bedingt weiter gekommen! Hab vorhin einfach mal substr() in eine Variable $a kopiert und mit print() ausgeben lassen ... interessanterweise wurde hier nur EIN Zeichen gespeichert und ausgegeben!
    Ausser Deinem vorgeschlagenen "AND" hatte ich die umgedrehten Varianten auch schon versucht Da hängt man echt 4 Tage an EINER Zeile ... so frustrierend ...
    aber irgendwie kommt dann eine Zeit in der man nicht mal mehr ordentlich einen print()-Befehl schreiben kann *lach
    Die besten Ergebisse erzielt man dann erst nach einer ordentlichen Mütze Schlaf

    Das nenne ich mal kreativ. ;-)

    Schau dir mal count() ...
    das hat irgendwie nicht funktioniert, ... "Array given" .. und count_recursiv zählt ja ALLE Elemente in einem Multid.Array... war also nicht das was ich gesucht hatte
    Macht aber Spass auch mal wieder etwas "exotischere" Verianten zu verwenden *g

    Liebe Grüsse:
    Tammy
    Ein Hund ist treu - ein Hund ist ehrlich -
    der Mensch dagegen sehr beschwerlich
    (Tamara-Jasmin 04.2011 - Forum privat - nicht öffentlich zugänglich)



  5. #5
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    42
    Beiträge
    2.159
    Blog-Einträge
    1
    Zitat Zitat von Tamara-Jasmin Beitrag anzeigen
    Macht aber Spass auch mal wieder etwas "exotischere" Verianten zu verwenden *g
    Exotik kann aber auch täuschen. Und wenn du Pech hast, bringt es, wie in deinem Fall, falsche Ergebnisse. Nimm die Sachen, die funktionieren und für spezifische Dinge geschaffen wurden. Wenn etwas nicht geht und Fehler auswirft, wie im Fall von sizeof/count, dann liegt es nicht an der Funktion, sondern am Code insgesamt.

    Einfaches Beispiel:

    PHP-Code:
    // einfaches Array
    $array = [024];

    // assoziatives Array
    $array2 = [0=> 2'frucht' => 'apfel'];

    echo 
    sizeof($array); // Ergebnis = 3
    echo sizeof($array2); // Ergebnis = 3

    echo max(array_keys($array));   // Ergebnis = 2
    echo max(array_keys($array2)); // Ergebnis = 4 
    Für beide Arrays werden durch deine "exotische Variante" nun falsche Ergebnisse zurück geliefert. ;-)
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

  6. #6
    vB-Guru Avatar von Tamara-Jasmin
    Registriert seit
    21.06.2010
    Ort
    Berchtesgaden
    Beiträge
    1.339
    Danke Dir, hat jetzt gut geklappt. Bin heute erst wieder dazu gekommen.

    Sicher hättest Du es anders gemacht - und ich muss noch den "Notice-Fehler" mit einer If-Abfrage beheben für die leeren Werte - aber so klappt es auch ganz gut mit meinen max. 4 Werten aus dem Explode:

    PHP-Code:

    function phraseneinlesen () { 
     
     
        
    $phrasenpfad "../files/phrasen.oez"
     
        
    $phrasenfromfile file($phrasenpfadFILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES); 
     
        
    $phrasen = array(); 
     
        foreach(
    $phrasenfromfile AS $index => $zeile
        { 
            
    $zeile trim($zeile); 
     
            if(empty(
    $zeile))  
            { 
                continue;  
            } 
     
            if(
    substr($zeile02) == '//'
            { 
                continue; 
            } 
     
            list(
    $index$wert0$wert1$wert2 ) = explode('||'$zeile4); 
     
            
            
    $index trim($index); 
            
    $wert0 trim($wert0); 
            
    $wert1 trim($wert1); 
            
    $wert2 trim($wert2); 
            
    $wert2 rtrim($wert2';'); 
     
            if(!(empty(
    $index) OR empty($wert0))) 
            { 
                
    $phrasenerstellen = array($index$wert0); 
     
                if (isset(
    $wert1)) {$phrasenerstellen[] = $wert1;}; 
                if (isset(
    $wert2)) {$phrasenerstellen[] = $wert2;}; 
     
                
    $phrasen[$index] = $phrasenerstellen
            } 
        } 
     
     
        echo 
    "<pre> Testausgabe: <br />"
        
    print_r($phrasen); 
        echo 
    "</pre>"
     
     
        return 
    $phrasen

     
    print_r(phraseneinlesen()); 
    Liebe Grüsse:
    Tammy

    Nachtrag:
    Das ist jetzt alles nur mal ganz grob.

    Evtl. ist es sogar besser die eingelesene Datei so anzupassen, dass Leereinträge erstellt werden und immer 4 Werte vorhanden sind.
    Dann könnte man sie mit weniger Code z.B. direkt einlesen - list($index, $fromtime, $totime, $ph_string)
    Die Datei könnte dann so aussehen:
    uhr || LEER || LEER || Uhr
    hng || 16:00 || LEER || Heute Nachmittag ab $phrase[hng][1] $phrase[$uhr][3] geschlossen

    So... und nun putze ich mal meinen Bildschirm .. hab gerade eine halbe Minute hier versucht einen Punkt zu löschen

    Liebe Grüsse:
    Tammy
    Geändert von Tamara-Jasmin (21.01.2017 um 10:21 Uhr)
    Ein Hund ist treu - ein Hund ist ehrlich -
    der Mensch dagegen sehr beschwerlich
    (Tamara-Jasmin 04.2011 - Forum privat - nicht öffentlich zugänglich)



  7. #7
    vB-Guru Avatar von Boothby
    Registriert seit
    28.09.2001
    Alter
    42
    Beiträge
    2.159
    Blog-Einträge
    1
    2x $index für unterschiedliche Sachverhalte solltest du vermeiden.
    LG Stefan

    Scott me up, Beamie!!

    Unser vB: Television Board

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Allgemein - deny from greift nicht
    Von sps-forum im Forum vBulletin 4 Fragen und Probleme
    Antworten: 1
    Letzter Beitrag: 12.01.2017, 11:59
  2. Forum - Hinweis-Reihenfolge greift nicht
    Von InComplete im Forum vBulletin 4 Fragen und Probleme
    Antworten: 23
    Letzter Beitrag: 19.01.2012, 19:25
  3. Forum - Skimlinks greift nicht?
    Von Been Told im Forum vBulletin 4 Fragen und Probleme
    Antworten: 4
    Letzter Beitrag: 05.04.2011, 09:52
  4. Ursprüngliche Frage erledigtAllgemein - Additional.css greift nicht
    Von samsine im Forum vBulletin 4 Fragen und Probleme
    Antworten: 4
    Letzter Beitrag: 17.09.2010, 20:06
  5. Stylevariable greift nicht auf PN lesen zu
    Von Junior im Forum vBulletin 3.5 Fragen und Probleme
    Antworten: 5
    Letzter Beitrag: 16.11.2005, 19:35

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •