Forum: PC-Programmierung microsoft visual studio community - C# - string zerlegen


von Stefan (Gast)


Lesenswert?

Hallo,

ich habe Erfahrung mit uC programmieren, aber bin komplett neu bei 
microsoft visual studio community C#. Ich habe für mein Problem viel 
gegoogelt aber alle Beispiele beziehen sich auf immer auf ein 
Trennzeichen in einem String, diesen habe ich leider nicht. Ich empfange 
immer z.B. 12381122334455667788 über (receiveBuffer.Substring(0, 
buffPos);) und muss es zerlegen und in datagrid zeigen:
123 //ID
8   // länger der Daten
11  //Data 1
22  //Data 2
33  //Data 3
44  //Data 4
55  //Data 5
66  //Data 6
77  //Data 7
88  //Data 8


string CANMSG_receive = receiveBuffer.Substring(0, buffPos);
string CANMSG_reiceve_Data = receiveBuffer.Substring(0, buffPos);
dataGridView_receive.Rows.Add(CANMSG_receive, CANMSG_reiceve_Data, 
CANMSG_receive_amount);

Kann mir einer helfen?
Gruss Stefan

von Stripax (Gast)


Lesenswert?

a) mit substring und etsprechender länge: 
https://msdn.microsoft.com/de-de/library/aka44szs(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

b) string in bytearray umwandeln

von Hiermussnnamereinnamereinnamerein (Gast)


Lesenswert?

Unten ein möglicher Ansatz, den String per "Substring" 
auseinanderzupfriemeln. Für weitere Ratschläge sind die Infos zu mager.
1
static void Main()
2
{
3
  var input = "12381122334455667788";
4
5
  foreach (var value in GetValues(input)) Console.WriteLine(value);
6
  // ...
7
  var x = GetValues(input).ToArray();
8
  // ...
9
}
10
11
public static IEnumerable<int> GetValues(
12
  string input,
13
  int nIdDigits = 3,
14
  int nLengthDigits = 1,
15
  int nDataElementDigits = 2)
16
  {
17
    if(input.Length < nLengthDigits + nDataElementDigits)
18
    {
19
      throw new ArgumentException("bla");
20
    }
21
22
    int curIdx = nIdDigits + nLengthDigits;
23
    int endIdx = input.Length;
24
25
    if(((endIdx - curIdx) % nDataElementDigits) != 0)
26
    {
27
      throw new ArgumentException("...");
28
    }
29
30
    while (curIdx < endIdx)
31
    {
32
      yield return int.Parse(input.Substring(curIdx, nDataElementDigits));
33
      curIdx += nDataElementDigits;
34
    }
35
  }

von Stefan (Gast)


Lesenswert?

super funktioniert wunderbar danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.