Announcement

Collapse
No announcement yet.

Wert errechnen

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

  • Wert errechnen

    Hallo,

    ich erhalte von einem programm die position von einem wert

    Test01 -> enthält informationen von zeichen 0-9
    Test02 -> enthält informationen von zeichen 10-19
    Test03 -> enthält informationen von zeichen 20-29
    Testxx -> enthält informationen von zeichen 490- 499

    wenn ich nun test01 und test02 erhalte, soll c# mir zeichen 0-9 und zeichen 10-19 ausgeben. es kann aber auch sein, dass test01 leer ist und erst test02
    werte enthält. dann wird test01 so aussehen "0000000000" und dahinter test02 angehängt. der letzte wert ist gleichzeitig auch der letzte auszugebende wert.

    bsp: wert 14 und 21 ist gesetzt:
    test01: 0000000000
    test02: 0000001000
    test03: 0000000001

    ab test04 keine werte gesetzt.

    ich habe leider keine idee, wie ich an dieses problem herangehen soll.
    mein problem ist das setzen des wertes an die richtige stelle und auch das erkennen der anzahl benötigter testxx. habt ihr iene idee, einen tipp der mir helfen könnte?

    vielen dank!

  • #2
    Hallo,

    handelt es sich immer nur um die Zeichen 0 und 1 oder auch um andere? Brauchst Du als Ergebnis immer einen String mit 500 Zeichen (Position 0 bis 499)?

    Mein Grundgedanke ist: Erstelle ein passendes char-Array, initialisiere alle Werte mit '0'. Mit Array.CopyTo werden die jeweiligen Werte übertragen. Zum Schluss wird das char-Array als String gelesen. Dabei können String.ToCharArray und String-Konstruktor(Array) helfen.

    Überflüssige '0' können auch mit String.TrimEnd abgeschnitten werden.

    Jürgen

    Comment


    • #3
      hi,

      danke für deine tipps. ich denke, dass ich damit einen teil umsetzen kann.
      mein problem ist nun noch, dass ich z.b. den wert 1,8,17 und 34 erhalte.
      nun weiß ich aber nicht, wie ich das dann in

      (01-10)0010000001
      (11-20)0001000000
      (21-30)0000000000
      (31-40)0000001000


      umwandle...

      Comment


      • #4
        Wenn es sich (nach meinem Vorschlag) um ein 500-Array handelt:
        Code:
        int[] input = new int[] { 1,8,17, 34 };
        foreach(int position in input)
           MyCharArray[position] = '1';
        Wenn es sich um ein int-Array handelt, weil nur die Werte 0 und 1 vorkommen:
        Code:
        foreach(int position in input)
           MyIntArray[position] = 1;
        Wenn es sich um 50 einzelne 10-Arrays handelt:
        Code:
        int[] MyIntArray = new int[50,10];
        //  int-Arrays sind, glaube ich, mit 0 initialisiert, aber ausprobieren!
        foreach(int position in input) {
           int row = (position - 1) / 10;
           int col = (position - 1) % 10;
           MyIntArray[row,col] = 1;
        }
        Oder so ähnlich - mit 2-dimensionalen Arrays kenne ich nur das Prinzip.

        Das sollten noch einige weitere Anregungen sein. Jürgen

        Comment


        • #5
          hi,

          danke,

          habe es nun folgendermaßen gelöst:
          Code:
          int[,] MyIntArray = new int[50,10];
          //  int ist mit 0 initialisiert...
          foreach(int position in input) {
             int row = (position - 1) / 10;
             int col = 10-(position - 1) % 10;
             MyIntArray[row,col] = 1;
          }
          
          foreach (int testing in MyIntArray)
                      {
                          string test = Convert.ToString(testing);    
                          //Ausgabe
                       }
          Nun weiß ich aber nicht weiter, wie ich die Binären Werte immer zu je 10 Stellen in Hex umwandle.

          Von Binär(String) zu Hex habe ich folgendes Statement.
          Code:
          string test = Convert.ToString(Convert.ToInt32(test), 2);
          Nur wie teile ich den String in 10er Pakete?
          Zuletzt editiert von schnurzli; 20.01.2009, 15:15.

          Comment


          • #6
            Hallo,

            zunächst bitte ich dringend darum, Code auch als solchen zu markieren; das liest sich immer besser: entweder mit "[highlight=C#]" oder notfalls mit dem #-Button. Das kannst Du auch nachträglich durch "Editieren" erledigen.

            Zur konkreten Frage: So langsam verstehe ich nicht mehr, in welcher Form die Daten kommen und wie Du sie im Ergebnis haben willst. Laut Anfangsfrage bekommst Du Positionen, willst Bits eintragen und mit Convert.ToString einen String haben. Wozu willst Du den String in 10er-Pakete teilen (das geht doch einfach durch wiederholtes Substring)? Du musst meine jetzigen Hinweise deshalb selbst interpretieren.

            Wenn Bits in Zahlen umgesetzt werden sollen (zumal wenn Du von Hex sprichst), darfst Du doch keine 10er-Pakete benutzen, sondern brauchst 8er-Pakete. Die Art, wie die Positionen geliefert werden, steht allerdings dazu im Widerspruch.

            Wenn Du die Array-Werte in einem String zusammensetzen willst, ist ein char-Array doch besser als ein int-Array. Dazu gibt es nämlich den String-Konstruktor (Char[]) und umgekehrt String.ToCharArray.

            Zur Konvertierung von Bits gibt es die Methode Convert.ToInt32(String, Int32), wo der zweite Parameter die Basis (hier: 2) bezeichnet.

            Ich hoffe, das hilft Dir weiter. Jürgen

            Comment


            • #7
              hi,

              danke,

              ich habe mich bei meinem ersten posting vertan. es sind natürlich 8 bits, welche ich teilen möchte. ich habs dann, um dich nicht zu verwirren, bei 10 belassen (was leider wiederum zu verwirrung geführt hat )

              nochmals meine erklärung und meine idee für die vorgangsweise.

              1) ich erhalte werte aus einer datenbank.
              2) diese wandle ich in die binäre schreibweise um und speichere sie in einem array, welches zweidimensional ist. jedoch nicht eins zu eins, sondern ich drehe die bits um...
              3) ich habe 64 zeilen zu je 8 zeichen -> 512 zeichen.
              4) nun kann ich die zahlen über das array legen -> das funktioniert bereits.
              5)nun muss ich die einzelnen "8er" wieder aus dem array herausbekommen und einen string daraus machen.

              was mir noch eingefallen ist. char array kann es keiner sein, weil ich ja dann probleme mit einem wert > 9 habe...
              Zuletzt editiert von schnurzli; 20.01.2009, 14:21.

              Comment


              • #8
                Hab das teilen jetzt so gelöst, dass ich die Werte an den StringBuilder übergebe und dazu eine Schleife durchlaufen lasse, die mir per Substring immer den richtigen bereich ausliest und in sb.Append speichert.

                Code:
                for (int k = -1; k < 512; k++)
                            {
                                if ((k % 8) != 0)
                                {
                                    continue;
                                }
                                string Test = Convert.ToString(Convert.ToInt32(test0.Substring(k, 8), 2), 16).ToUpper().PadLeft(2, '0');
                                sb2.Append(Test);
                            }

                Comment


                • #9
                  Hallo,

                  ich hoffe, dass Dein mehrfaches Convert.To passt; das will ich nicht nachvollziehen. Aber die for-Schleife kannst Du noch verbessern:
                  Code:
                  for (int k = 0; k < 512; k += 8) { ... }
                  Gruß Jürgen

                  Comment

                  Working...
                  X