Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 18
  1. #1
    HILFE!!!! ist offline Routinier
    registriert
    03-05-2001
    Beiträge
    297

    ereg_replace() oder was anderes?

    Hallo

    Ich müsste alle Zeichen ersetzen und zwar durch Punkt/Strich, damit Texte im Morsealphabet dargestellt werden können.

    Welche Funktion wäre da denn wohl passend?

    Danke schonmal
    jojo

  2. #2
    style-guide! ist offline Lounge-Member
    registriert
    19-09-2001
    Ort
    /nrw/zuhaus
    Beiträge
    2.601
    str_replace wenn möglich oder aber preg_replace. Morsecodes könntest du in einem Array ablegen:

    $morsecode = array ("a" => "..-..", "b" => ".---.", .....);

    Und das dann entsprechend abarbeiten mit dem zu morsenden Code. Von der Geschwindigkeit ist folgende Reihenfolge gültig, die schnellste Variante zuerst:

    str_replace
    preg_replace
    ereg_replace

    Anders fällt mir jetzt nicht ein.

  3. #3
    Avatar von kasimir83
    kasimir83 ist offline Lounge-Member
    registriert
    30-03-2002
    Ort
    Dresden
    Beiträge
    5.879
    Vorher würde ich aber noch ein sinngemäßes to_lower_case() verwenden, das halbiert den Aufwand fast.



    Die Haptik deiner Website ist scheiße.

    Ein Nutzer braucht das Root-Passwort so dringend wie Nitroglyzerin durchgeschüttelt werden muß.

  4. #4
    style-guide! ist offline Lounge-Member
    registriert
    19-09-2001
    Ort
    /nrw/zuhaus
    Beiträge
    2.601
    Das ist irgendwie eine lustige Aufgabe....

    PHP-Code:
    <?php
    $code 
    = array ("a" => "z",
                   
    "b" => "y",
                   
    "c" => "x",
                   
    "d" => "w",
                   
    "e" => "v",
                   
    "f" => "u",
                   
    "g" => "t",
                   
    "h" => "s",
                   
    "i" => "r",
                   
    "j" => "q",
                   
    "k" => "p",
                   
    "l" => "o",
                   
    "m" => "n",
                   
    "n" => "m",
                   
    "o" => "l",
                   
    "p" => "k",
                   
    "q" => "j",
                   
    "r" => "i",
                   
    "s" => "h",
                   
    "t" => "g",
                   
    "u" => "f",
                   
    "v" => "e",
                   
    "w" => "d",
                   
    "x" => "c",
                   
    "y" => "b",
                   
    "z" => "a");
    $text "Dieser Text soll in Morse Zeichen umgewandelt werden!";
    $i 0;
    for (
    $i=0;$i<strlen($text);$i++) print $code[$text{$i}];
    ?>
    Müsstest halt nur noch im array das korrekte Morsealphabet hinterlegen.
    Geändert von style-guide! (11-11-2003 um 22:30 Uhr)

  5. #5
    Avatar von rasputin
    rasputin ist offline Lounge-Member
    registriert
    31-10-2001
    Beiträge
    3.102
    echo str_replace($text{$i},$code[$text{$i}],$text{$i});
    huaah, was ist denn das? willst du nicht einfach echo $code[$text{$i}]; schreiben?

  6. #6
    style-guide! ist offline Lounge-Member
    registriert
    19-09-2001
    Ort
    /nrw/zuhaus
    Beiträge
    2.601
    Original geschrieben von rasputin
    huaah, was ist denn das? willst du nicht einfach echo $code[$text{$i}]; schreiben?
    Wo du recht hast, hast du recht, oben korrigiert Herr "Kaiser"
    Geändert von style-guide! (11-11-2003 um 22:31 Uhr)

  7. #7
    HILFE!!!! ist offline Routinier
    registriert
    03-05-2001
    Beiträge
    297
    Ich habe es einmal ausprobiert, an dieser Stelle Danke für den Code.

    Von normalen Text übersetz es problemlos in Morsecode.
    Ich wollt es nun auch wieder rückübersetzen lassen, was ja genau gleich verlaufen müsste.
    Aber er gibt nie den ursprünglichen Text aus, gar nichts, auch keine Fragmente

    Ich poste mal den Code:
    PHP-Code:

    <form action = "morsen.php?job=replace" method="post">
        <textarea input type="text" name="text" cols="40" rows="10">
    Gib hier den Text ein, der umgewandelt werden soll
        </textarea>
            <br/>
            Ins Morsealphabet
            <input type="radio" name="direction" value="m">
            <br/>
            In Text umwandeln
            <input type="radio" name="direction" value="t">
            <br/>
        <input type="submit" value="Los!">
    </form>


    <?
    if($_GET['job'] == "replace") {
    if(empty(
    $_POST['text'])) { die("Kein Text eingegeben"); }
    if(empty(
    $_POST['direction'])) { die("Bitte Richtung auswählen"); }
    $text $_POST['text'];


    if(
    $_POST['direction'] == "m") {    
    echo 
    "$text <br/>";
    $code = array ("a" => "kl ",
                   
    "b" => "lkkk ",
                   
    "c" => "lklk ",
                   
    "d" => "lkk ",
                   
    "e" => "k ",
                   
    "f" => "kklk ",
                   
    "g" => "llk ",
                   
    "h" => "kkkk ",
                   
    "i" => "kk ",
                   
    "j" => "klll ",
                   
    "k" => "lkl ",
                   
    "l" => "klkk ",
                   
    "m" => "ll ",
                   
    "n" => "lk ",
                   
    "o" => "lll ",
                   
    "p" => "kllk ",
                   
    "q" => "llkl ",
                   
    "r" => "klk ",
                   
    "s" => "kkk ",
                   
    "t" => "l ",
                   
    "u" => "kkl ",
                   
    "v" => "kkkl ",
                   
    "w" => "kll ",
                   
    "x" => "lkkl ",
                   
    "y" => "lkll ",
                   
    "z" => "llkk ",
                   
    " " => " ");
    $i 0;
    for (
    $i=0;$i<strlen($text);$i++) {
    print 
    $code[$text{$i}];
    //Ausgabeschleife
    // Directionschleife


    if($_POST['direction'] == "t") {
    echo 
    "$text <br/>"
    $code = array ("kl " => "a",
                   
    "lkkk " => "b",
                   
    "lklk " => "c",
                   
    "lkk " => "d",
                   
    "k " => "e",
                   
    "kklk " => "f",
                   
    "llk " => "g",
                   
    "kkkk " => "h",
                   
    "kk " => "i",
                   
    "klll " => "j",
                   
    "lkl " => "k",
                   
    "klkk " => "l",
                   
    "ll " => "m",
                   
    "lk " => "n",
                   
    "lll " => "o",
                   
    "kllk " => "p",
                   
    "llkl " => "k",
                   
    "klk " => "r",
                   
    "kkk " => "s",
                   
    "l " => "t",
                   
    "kkl " => "u",
                   
    "kkkl " => "v",
                   
    "kll " => "w",
                   
    "lkkl " => "x",
                   
    "lkll " => "y",
                   
    "llkk " => "z",
                   
    " " => " ");
    $i 0;
    for (
    $i=0;$i<strlen($text);$i++) {
    print 
    $code[$text{$i}];
    //Ausgabeschleife
    //Directionschleife
    //job=replace Klammer
    ?>
    jojo

  8. #8
    Iltis ist offline Lounge-Member
    registriert
    14-05-2001
    Ort
    Bern
    Beiträge
    619
    Das Problem ist, dass die Wörter aus l und k's bestehen und da gibt es viele Kombinationen:

    Wenn du z.B. das Wort "llklk" nimmst dann gibt es für die Rückübersetzung die Möglichkeit l-l-k-l-k oder ll-kl-lk oder llk-llk etc.
    Ich hoffe ich konnte dir klar machen, wo das Problem liegt.

    Ein Lösungsansatz wäre, dass du nach jedem Buchstaben ein / einsetzt und dann ersetzt du kl/ durch a.

    [EDIT]Beim Morsen wird ja auch ein Abstand zwischen Buchstaben und Wörtern gemacht[/EDIT]

  9. #9
    Microkotz ist offline Foren-Gott
    registriert
    01-12-2002
    Ort
    Germany --> Baden-Württemberg
    Beiträge
    2.240
    das liegt daran, dass die For-Schleife Zeichen für Zeichen abarbeitet. Das funktioniert in die eine Richtung, da hier ein Zeichen in mehrere andere übersetzt wird. Umgekehrt funktioniert es nicht, da er nicht wissen kann, wie lange der Morsecode für z.B. "a" ist. Du müsstest zwischen die einzelnen "Mosebuchstaben" ein Trennzeihen (z.B. _) schreiben und den kompletten String bei diesen Trennzeichen zelegen. Z.B. mit explode
    [edit]Iltis war schneller [/edit]
    [size=1]Ehe == errare humanum est == irren ist Menschlich
    # define god root

  10. #10
    HILFE!!!! ist offline Routinier
    registriert
    03-05-2001
    Beiträge
    297
    Aber es gibt ja nur ein einziges
    "kllk "

    Also jeder Ausdruck zwischen den Klammern ist einzigartig und kann nicht verwechselt werden. Schliesslich ist "kllk " nicht dasselbe wie "kll "? Oder verstehe ich irgendwas falsch

    e:/ Das Trennzeichen (_) von Microkotz ist bei mir ja der Leerschlag
    jojo

  11. #11
    Microkotz ist offline Foren-Gott
    registriert
    01-12-2002
    Ort
    Germany --> Baden-Württemberg
    Beiträge
    2.240
    bei dem Script wird Zeichen für Zeichen abgearbeitet.
    Bei z.B kllk sucht er im Array zuerst nach dem Feldnamen k,
    dann nach dem Feldnamen l,
    dann nach dem Faldnamen l,
    dann nach dem Feldnamen k.
    [size=1]Ehe == errare humanum est == irren ist Menschlich
    # define god root

  12. #12
    HILFE!!!! ist offline Routinier
    registriert
    03-05-2001
    Beiträge
    297
    Achso, jetzt versteh ich.

    Mit explode müsste ich also folgendes fabrizieren:
    PHP-Code:
    $transl explode (" "$text); 
    ?
    jojo

  13. #13
    Microkotz ist offline Foren-Gott
    registriert
    01-12-2002
    Ort
    Germany --> Baden-Württemberg
    Beiträge
    2.240
    richtig erkannt.
    Dann musst du den Inhalt jeder entstandenen Arrayfelds als Feldnamen für dein "Übersetzungsarray" einsetzen.

    Wie werden normale Leerzeichen bei dir dargestellt? Da könntest du event. auch noch Probleme bekommen.
    [size=1]Ehe == errare humanum est == irren ist Menschlich
    # define god root

  14. #14
    HILFE!!!! ist offline Routinier
    registriert
    03-05-2001
    Beiträge
    297
    Original geschrieben von kasimir83
    Vorher würde ich aber noch ein sinngemäßes to_lower_case() verwenden, das halbiert den Aufwand fast.
    für ein anderes Problem:
    Muss ich da tatsächlich den Grossbuchstabe in einen kleinen umwandeln mit "strlen"?

    gruss
    jojo

  15. #15
    Avatar von kasimir83
    kasimir83 ist offline Lounge-Member
    registriert
    30-03-2002
    Ort
    Dresden
    Beiträge
    5.879
    Ich könnte mich irren, aber was hat strlen mit einer case-Umwandlung zu tun?!



    Die Haptik deiner Website ist scheiße.

    Ein Nutzer braucht das Root-Passwort so dringend wie Nitroglyzerin durchgeschüttelt werden muß.

Seite 1 von 2 12 LetzteLetzte

Lesezeichen

Berechtigungen

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