Wie Leerzeichen " " durch Unterstrich "_" ersetzen ?

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • MGoth
    Smart Home'r
    • 02.01.2018
    • 98

    #1

    Wie Leerzeichen " " durch Unterstrich "_" ersetzen ?

    Hallo Zusammen,

    gibt es eine Möglichkeit von einem ausgegebenen Text die Leerzeichen " " durch einen Unterstrich "_" ersetzten zu lassen?

    Mein Problem ist, dass ich im ausgegeben Text keine Leerzeichen haben darf sondern stattdessen nur Unterstriche.

    Vielen Dank,
    Grüße
    Max
  • Prof.Mobilux
    Supermoderator
    • 25.08.2015
    • 4713

    #2
    In welcher Programmiersprache?
    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


    LoxBerry - Beyond the Limits

    Kommentar


    • MGoth
      MGoth kommentierte
      Kommentar bearbeiten
      In der Loxone Config.
  • svethi
    Lebende Foren Legende
    • 25.08.2015
    • 6313

    #3
    Ich vermute mal in Loxone.
    da würde nur ein Programmblock mit PicoC was werden
    Miniserver; KNX; Vitogate; EnOcean (EnOceanPi); Loxone Air; Caldav-Kalenderanbindung; RaspberryPi und für keine Frickellösung zu schade :-)

    Kommentar


    • MGoth
      MGoth kommentierte
      Kommentar bearbeiten
      Danke!

      Genau in der Loxone Config.
      Was ist PicoC?
  • Prof.Mobilux
    Supermoderator
    • 25.08.2015
    • 4713

    #4
    Online-Dokumentation LoxoneConfig Programm: Erfahren Sie, wie Sie Skripte und Programme mit der Loxone Konfigurationssoftware erstellen können!


    🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


    LoxBerry - Beyond the Limits

    Kommentar


    • MGoth
      MGoth kommentierte
      Kommentar bearbeiten
      Kannst Du mir behilflich sein :-)
      danke im Voraus!!

    • Prof.Mobilux
      Prof.Mobilux kommentierte
      Kommentar bearbeiten
      Nein, leider nicht. Ich nutze PicoC nicht mehr, da es sehr fehleranfällig ist und den MS schnell zum Absturz bringen kann, wenn man Fehler begeht. Meine Versuche habe ich mir anhand von vorhandenen Scripts irgendwie "zusammengebastelt"...

    • MGoth
      MGoth kommentierte
      Kommentar bearbeiten
      Alles klar, trotzdem Danke.
      Die Anderen Kollegen haben mir freundlicherweise schon geholfen :-)
  • MGoth
    Smart Home'r
    • 02.01.2018
    • 98

    #5
    👍🏼 Danke!

    ...Nur da hören meine Kenntnisse leider auf 😢
    Kann mir da Jemand behilflich sein, was da die richtigen Programmparameter wären?

    Vielen Dank im Voraus!!

    Kommentar

    • Christian Fenzl
      Lebende Foren Legende
      • 31.08.2015
      • 11235

      #6
      Kannst du die Strings nicht gleich richtig mit _ in Loxone zusammenbauen?
      Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

      Kommentar

      • MGoth
        Smart Home'r
        • 02.01.2018
        • 98

        #7
        Der Text kommt ja vom Alarmbaustein und der gibt sie mit Leerzeichen aus.
        Dass TTS (Text to speech) Modul kann aber nur mit Unterstrich verarbeiten. Und da der Text jedes mal anders ist, kann ich ihn nicht vorher schreiben. Deshalb brauche ich diese automatische Änderung.

        Kommentar

        • romildo
          Lebende Foren Legende
          • 25.08.2015
          • 5144

          #8
          Wenn TTS nur Text mit _ aber nicht mit Leerzeichen versteht, sollte dies aus meiner Sicht aber im TTS Modul geändert/abgefangen werden.
          Welches "TTS Modul" verwendest Du?
          lg Romildo

          Kommentar


          • MGoth
            MGoth kommentierte
            Kommentar bearbeiten
            Das Loxberry "Alexa <-> Lox" Plugin.
            Sehe ich auch so, aber der Programmierer ist "untergetaucht" ;-)

          • romildo
            romildo kommentierte
            Kommentar bearbeiten
            Tja, da kann ich Dir leider auch nicht helfen. Alexa und co. kommt bei mich nicht ins Haus
        • romildo
          Lebende Foren Legende
          • 25.08.2015
          • 5144

          #9
          Hier mal ein Beispiel für den Programmblock.
          An TI1 kommt der Text mit Leerzeichen
          An TQ1 wird der Text mit _ ausgegeben
          An AI1 kommt ein Triggersignal

          Code:
          /*
          Romildo
          18.01.2020
          Text, Leerzeichen in _ umwandeln
          Texteingang TI1
          Trigger an AI1
          Textausgang TQ1
          */
          
          #define BUFF_SIZE 256
          char text[BUFF_SIZE];
          int nEvents;
          int i;
          
          while (TRUE)
          {
          nEvents = getinputevent();
          if (nEvents & 0x08) // 0x08 für Eingang AI1
          {
          text = getinputtext(0);
          
          for (i = 0; i < strlen(text); ++i)
          {
          if (text[i] == ' ')
          {
          text[i] = '_';
          }
          }
          setoutputtext(0,text);
          }
          sleep(100);
          }
          oder auch ganz ohne Trigger
          Zeilen
          Code:
          if (nEvents & 0x08) // 0x08 für Eingang AI1
          {
          ersetzen durch
          Code:
          if (nEvents) // ohne Trigger
          {
          sleep(10);
          Zuletzt geändert von romildo; 18.01.2020, 20:08.
          lg Romildo

          Kommentar


          • MGoth
            MGoth kommentierte
            Kommentar bearbeiten
            Vielen vielen Dank!! - es klappt!!!

            Wofür sollte die "Trigger" Lösung besser sein wie die ohne?

            Ich hatte die Trigger Lösung umgesetzt. Habe nun aber das Problem, dass der alte Wert hinten stehen bleibt.

            Viele Grüße
        • romildo
          Lebende Foren Legende
          • 25.08.2015
          • 5144

          #10
          MGoth

          Wofür sollte die "Trigger" Lösung besser sein wie die ohne?
          Ob Du den Trigger benötigst oder nicht, kannst Du selber entscheiden.
          Mit Trigger wird der Text halt erst am Ausgang ausgegeben wenn der Eingang AI1 auf 1 geht.
          So könnte z.B. der Text Fenster offen an AI1 angelegt werden, dieser aber erst nach einer gewissen Zeit über den Trigger an den Ausgang weitergegeben werden.

          Habe nun aber das Problem, dass der alte Wert hinten stehen bleibt.
          ohne Trigger!
          Kann es sein, dass Du das
          sleep(10);
          vor der Zeile
          nEvents = getinputevent();
          nicht eingefügt hast.
          Wenn nicht, versuch es mal mit einem grösseren Wert, also z.B. sleep(100);

          Bei mir reicht allerdings auch schon ein sleep(1); Mir ist da leider nichts schlaueres als ein sleep eingefallen

          Nachtrag:
          Hier nochmal der komplette Code ohne Trigger.
          Code:
          /*
          Romildo
          18.01.2020
          Text, Leerzeichen in _ umwandeln
          Texteingang TI1
          Textausgang TQ1
          */
          
          #define BUFF_SIZE 256
          char text[BUFF_SIZE];
          int nEvents;
          int i;
          
          while (TRUE)
          {
          nEvents = getinputevent();
          if (nEvents) // ohne Trigger
          {
          sleep(10); // kurze Verzögerung damit nicht der vorherige Text ausgegeben wird. sleep(1) reicht auch
          text = getinputtext(0);
          
          for (i = 0; i < strlen(text); ++i)
          {
          if (text[i] == ' ')
          {
          text[i] = '_';
          }
          }
          setoutputtext(0,text);
          }
          sleep(100);
          }
          Zuletzt geändert von romildo; 19.01.2020, 10:36.
          lg Romildo

          Kommentar


          • MGoth
            MGoth kommentierte
            Kommentar bearbeiten
            Habe dieses Programm jetzt genommen, und es funktioniert :-)
            Danke!
        • Christian Fenzl
          Lebende Foren Legende
          • 31.08.2015
          • 11235

          #11
          Hi,

          ich hab mir gerade Peter's Code in Alexa4Lox angesehen, und das ist tatsächlich etwas verzwickt aufgrund der Kaskadierung der Programmaufrufe php->sh->sh.

          Ich habe jetzt versucht, für das Alexa4Lox-Plugin einen reinen Text-To-Speech Aufruf zu erstellen, der die Konfiguration des Plugins übernimmt.

          Das enthaltene tts.php ins Verzeichnis /opt/loxberry/webfrontend/htmlauth/plugins/alexa2lox/ (wo die anderen Dateien liegen) kopieren.

          Der Webaufruf ist dann:
          Code:
          [URL="http://user:pass@loxberry/admin/plugins/alexa4lox/tts.php?device=Wohnzimmer&text=Einen"]http://<lbuser>:<lbpass>@loxberry/admin/plugins/alexa2lox/tts.php?device=Wohnzimmer&text=Einen[/URL] wunderschönen guten Tag!
          Vielleicht könntest du das mal probieren, und wenn das geht, dann frag ich Peter, ob er's mit reinnimmt.

          lg, Christian

          PS: In der Regel müssen Leerzeichen in der URL uri-encoded sein (%20) - ich weiß nicht, ob Loxone das selbst automatisch macht.
          Angehängte Dateien
          Zuletzt geändert von Christian Fenzl; 20.01.2020, 07:03. Grund: Pfad/URL korrigiert
          Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

          Kommentar

          • Christian Fenzl
            Lebende Foren Legende
            • 31.08.2015
            • 11235

            #12
            "V2" des Patches:
            • Query parameter tts.php?device=Wohnzimmer&text=Mein Text&vol=<0...100> Volume der Sprachausgabe mitgeben
            • update.sh gefixt (Update von alexa_remote_control.sh funktioniert jetzt korrekt und lädt direkt aus dem GitHub Repo, Update erforderlich für die Volume)
            Angehängte Dateien
            Zuletzt geändert von Christian Fenzl; 20.01.2020, 07:04.
            Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

            Kommentar


            • Christian Fenzl
              Christian Fenzl kommentierte
              Kommentar bearbeiten
              Nein. Unterstrich ist kein Umlaut.
              In meinem tts.php ist eine Ersetzung für Umlaute. Die brauchte es gestern noch für richtige Umlaute, und jetzt nicht mehr.
              Hat mit dem Aufruf nichts zu tun.

            • romildo
              romildo kommentierte
              Kommentar bearbeiten
              Ich habe mir nicht die Mühe gemacht alle Skripte anzusehen, daher sei mir die Frage erlaubt:
              Wäre es denn nicht möglich, die Leerzeichen durch ein Unterstrich, genauso zu tauschen wie die Umlaute?

            • Christian Fenzl
              Christian Fenzl kommentierte
              Kommentar bearbeiten
              Mit dem tts.php braucht man keine Underscores.
              Das ist eine Eigenart des Alexa.php von Peter, weil die Leerzeichen die Parameter zerlegen und selbst mit übergebenen Anführungszeichen beim Text will die Aufruf-Routine von Peter (Alexa.php -> start.sh -> alexa_remote_control.sh) den Text mit Leerzeichen nicht als einen einzelnen Parameter annehmen.
              Im tts.php rufe ich alexa_remote_control.sh direkt auf und da funktioniert die Übergabe der Leerzeichen korrekt.
              Das Setzen der TTS-Volume kann Peters Aufruf garnicht.
          • romildo
            Lebende Foren Legende
            • 25.08.2015
            • 5144

            #13
            Zitat von Christian Fenzl
            ...PS: In der Regel müssen Leerzeichen in der URL uri-encoded sein (%20) - ich weiß nicht, ob Loxone das selbst automatisch macht.
            Loxone macht das.
            Aus
            Dies ist ein Text mit Leerzeichen
            wird
            Dies%20ist%20ein%20Text%20mit%20Leerzeichen
            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: http_urlencoded.png
Ansichten: 806
Größe: 12,9 KB
ID: 231125
            lg Romildo

            Kommentar


            • svethi
              svethi kommentierte
              Kommentar bearbeiten
              In einer URL werden Leerzeichen als + codiert. Schon daran gedacht?

            • Christian Fenzl
              Christian Fenzl kommentierte
              Kommentar bearbeiten
              svethi Wurscht, Hauptsache richtig codiert.
          • Christian Fenzl
            Lebende Foren Legende
            • 31.08.2015
            • 11235

            #14
            "V3" des Patches: Fix des Umlauts, den romildo gefunden hat
            Angehängte Dateien
            Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine

            Kommentar

            • dizzy85
              MS Profi
              • 08.12.2015
              • 694

              #15
              Wenn euch das weiter Hilft.... Mit dem TTs und dem Plugin. Ich nutze das Script auch aber halt ohne Plugin. Bei mir ist es so das ich den zusprechenden Text ohne Trennung und Leerzeichen an die gute Alexa übergebe und sie eigentlich immer einen ordentlichen Satz daraus macht...

              Kommentar


              • MGoth
                MGoth kommentierte
                Kommentar bearbeiten
                Interessant - und wie funktioniert das genau?

                kannst Du das näher erklären?

                Vielen Dank.

              • dizzy85
                dizzy85 kommentierte
                Kommentar bearbeiten
                Nunja wie schon oft erwähnt benutze ich das Script von Loetzimmer nicht über das Plugin von Peter sondern als manuelle Installation auf dem Loxberry in Verbindung mit dem Any-Plugin, weil das Plugin trotz aller Mühe Schwachstellen hat und nicht auf den aktuellen Stand des Scriptes ist.
                Habe z.b beim manuellen Aufruf in der Konsole die Speak-Funktion ausgeführt z.b.
                alexa_remote_control.sh -d Esszimmer -e speak:'DasisteinTest!'

                Ohne Leerzeichen oder Unterstrich und Alexa hat es ganz normal wieder gegeben.
            Lädt...