Announcement

Collapse
No announcement yet.

Binary in kleine Segmente zerteilen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Binary in kleine Segmente zerteilen

    Moin alle zusammen,

    ich möchte eine Zeichenkette zerteilen. Und zwar möchte ich, dass jeder Buchstabe einer Zeichenkette in einer eigenen Spalte steht. Also spalte 1: H Spalte 2: a, Spalte 3: l Spalte 4: l usw

    ich dachte mir ganz easy das das über eine schleife funktioniert, deshalb habe ich auch schon etwas vorbereitet. Leider wird mein Ergebnis nicht erzieht, er wirft mir nur den Buchstaben H aus. Kann mir jemand weiterhelfen? wäre dringend :-)

    Code:
    DECLARE @i int;
    SET @i = 1;
    WHILE(@i < 201)
    BEGIN
    (SELECT SUBSTRING('Hallllllloooooooooooo',@i, 1) FROM Table);
    	SET @i = @i + 1;
    END;
    Grüße

    Ach ist in MSSQL noch so zur Info :-)

  • #2
    Wenn ich bei dem SELECT das FROM Table weglasse, wird dein Code ohne Fehler ausgeführt, liefert aber jeden Buchstaben in einer neuen Zeile. Ist auch logisch, da pro Buchstabe ein SELECT ausgeführt wird. Folgender Code liefert jeden Buchstaben in einer extra Spalte:
    Code:
    DECLARE @text varchar(255);
    SET @text = 'Hallllllloooooooooooo';
    
    DECLARE @sql varchar(255);
    SET @sql = 'SELECT ';
    
    DECLARE @i int;
    SET @i = 1;
    
    WHILE (@i < len(@text))
    BEGIN
    		SET @sql = @sql + '''' + SUBSTRING(@text, @i, 1) + ''', ';
    		SET @i = @i + 1;
    END
    SET @sql = @sql + '''' + SUBSTRING(@text, @i, 1) + '''';
    
    EXEC (@sql);
    Aber was hat das mit Binaries zu tun? Evtl. solltest du deinen Titel anpassen.

    Thomas

    Comment


    • #3
      Das sieht ja schonmal super aus!

      So jetzt komm ich zu meinem eigentlichen Problem da ich leider über Transfer nicht darauf komme :-(. Und zwar hab ich eine Binary[200] in der sich 200 Zahlen befinden. Diese möchte ich ausgeben und zwar jeweils immer 2 Zahlen zusammen (die auch nebeneinander stehen). Dann möchte ich immer 2 Dieser zwei Zahlen paare vertauschen und sie dann zusammenfügen (Ich weiss das das bescheuert klingt, aber die blöde Software legt die Daten so ab)

      Ein Beispiel:

      In der Binary befinden sich die Zahlen so

      1274652467463872362846723827.

      das heisst

      Spalte 1: 74
      Spalte 2: 12

      kannst du mir sagen ob das funktioniert ohne extrem rießigen aufwand? Wäre super, häng da nämlich schon echt lange dran

      Ach und zu guter letzt möchte ich die Zahlen wieder mit Komma zusammenfügen. Heisst quasi:

      74,12 soll am schluss in einer Spalte stehen.

      Noch zu guter letzt: es soll aus einer Tabelle ausgelesen werden, und ich soll nicht beliebige Werte einsetzen können. Wenn du mir das noch erklären könntest, das wär fein :-)

      Grüße

      Comment


      • #4
        Ausgehend von meinem Beispiel sollte das kein Problem sein. Du gehst in der Schleife nicht ein Zeichen weiter, sondern immer vier (SET @i = @i + 4). Dann wird für das erste Zahlenpaar der Index von SUBSTRING (@i+2) und die Länge (2) angepasst, ein Komma eingefügt (+ ',' +) und ein weiteres SUBSTRING mit Index @i für das zweite Zahlenpaar angehängt. Dann muss nur noch das Komma gelöscht werden, dass in der Schleife an das letzte Zahlenpaar angehängt wird, damit der String gültiges SQL ergibt.
        Code:
        SET @sql = LEFT(@sql, LEN(@sql)-1);
        Um die Zahlen aus deiner Tabelle zu lesen, musst du @text mit dem Namen deines Tabellenfeldes ersetzen und ein FROM deineTabelle an @sql anfügen.

        Thomas

        Comment


        • #5
          Irgendwie will es bei mir nich so ganz funktionieren
          PHP Code:
          DECLARE @text binary;
          SET @text SELECT Binary_Name from Table;

          DECLARE @
          sql varchar(255);
          SET @sql 'SELECT ';

          DECLARE @
          i int;
          SET @1;

          WHILE (@
          len(@text))
          BEGIN
                  SET 
          @sql = @sql '''' SUBSTRING(@text, @i+22) + ''', ';
                  
          SET @= @4;
          END
          SET 
          @sql = @sql '','' SUBSTRING(@text, @i1) + '''';
          SET @sql LEFT(@sqlLEN(@sql)-1);
          EXEC (@sql); 
          ich schnalls nich so ganz, weiss auch nicht ob ich das komma richtig gesetzt habe... Könntest du mir nochmal auf die Sprünge helfen?

          Ach und mein Einwand noch dazu. Müsste bei Substring beim ersten mal er nicht die länge 1 haben. Damit er nur zwei Zeichen ausliest und nicht 3 oder?

          Comment


          • #6
            In der Schleife holst du dir nur das erste Paar, da fehlt dann noch das zweite:
            Code:
            SET @sql = @sql + '''' + SUBSTRING(@text, @i+2, 2) + ',' + SUBSTRING(@text, @i, 2) + ''', ';
            Und die Zeile mit dem SUBSTRING nach der Schleife löschen.

            Thomas

            Comment


            • #7
              Ich danke dir Thomas!

              Also der String funktioniert jetzt super. Aber wie bekomme ich das jetzt mit dem Binary hin? das sind Hexadezimale Zahlen, die ich danach dann auch noch konvertieren möchte in Dezimal-Zahlen. Die Konvertierung ist ein Problem, dass ich schon herausgefunden habe, ich muss jetzt nur noch irgendwie an dem Dateityp binary das ganze machen können. Mein Code sieht jetzt so aus

              PHP Code:
              DECLARE @text varchar;
              SET @text = (SELECT Binary FROM Table WHERE ID=...);

              DECLARE @
              sql varchar(255);
              SET @sql 'SELECT';

              DECLARE @
              i int;
              SET @1;

              WHILE (@
              len(@text))
              BEGIN
                      SET 
              @sql = @sql '''' SUBSTRING(@text, @i+22) + ',' SUBSTRING(@text,@i2) + ''',';
                      
              SET @= @4;
              EtND
              SET 
              @sql LEFT(@sqlLEN(@sql)-1);
              EXEC (@sql); 
              dort meldet er mir dann einen fehler, aber mit der zeichenkette läuft das jetzt...
              bzw die Berechnung kann ich sicherlich auch in der Schleife durchführen immer individuell für den Dateitypen, ausser es gibt eventuell einen übertrag... Also wie gesagt sind Hex Zahlen konvertiert werden, also immer das eine zahlenpaar und das andere zahlenpaar und dann auch ncoh schauen ob es einen übertrag gibt,

              Grüße

              Comment

              Working...
              X