C# Zahl(double) aus String parsen

Gast #2348557
Lesenswert?

hallo,

ich habe folgende funktion in c++ verwendet um aus einem relativ großem 
String, nach dem jeweiligem Schlüsselwort, die benötigte Zahl zu parsen.
Leider gibt habe ich in C# keine funktion ähnlich der von "strtod" 
gefunden.
Hat jemand einen ersatz für diese Funktion oder wie macht man das in C#.
Ich habe die Start Position der Nummer im String und benötige dann die 
Endposition zurück.
1
   
2
 bool read_double(string line, int* char_counter, double* double_ptr)
3
    {
4
        // pointer to a counter for position on the line
5
        // pointer to double to be read
6

7
        char *start = line + *char_counter;
8
        char *end;
9
        string tmp;
10

11
        *double_ptr =  strtod(start, &end);
12
        
13
        if(end == start)
14
        {
15
            FAIL(WRONG_FORMAT);
16
            return(false);
17
        };
18

19
        char_counter = end - line;
20
        return(true);
21
    }

Danke für die Hilfe
Gast #2348569
Lesenswert?

mein string sieht in etwa so aus:
'länge123.1234Breite1233.123tiefe1234234'

mit double.parse müsste ich ja alles erst per hand splitten und das wäre 
zusätzlicher aufwand. Mit Pointern oder Positionsangaben wie bei 
"strtod(start, &end);" ist das doch viel effektiver.

gibt es da nix besseres? Es kann doch nicht sein das man bei einer 
Sprache wie C# das alles per hand machen muss.
Gast #2348577
Lesenswert?

tobi schrieb:
> gibt es da nix besseres? Es kann doch nicht sein das man bei einer
> Sprache wie C# das alles per hand machen muss.

dann verwende ein anständiges Trennzeichen, dann könntest du erst Split 
machen und dann die Teile parsen. Unter .net gibt es auch noch Reguläre 
ausdrücke damit geht es bestimmt auch.
#2348687
Lesenswert?

tobi schrieb:
> mein string sieht in etwa so aus:
> 'länge123.1234Breite1233.123tiefe1234234'
>
> mit double.parse müsste ich ja alles erst per hand splitten und das wäre
> zusätzlicher aufwand. Mit Pointern oder Positionsangaben wie bei
> "strtod(start, &end);" ist das doch viel effektiver.

Wie viele Zeilen müssen denn in welcher Zeit geparst werden?
1
var s = "Länge123.1234Breite1233.123Tiefe1234234";
2

3
var parts = s.Split(new string[] { "Länge", "Breite", "Tiefe" }, StringSplitOptions.RemoveEmptyEntries);
4

5
// parts enthält das, was man erwarten würde
6
// parts[0] = "123.1234"
7
// parts[1] = "123.123"
8
// parts[2] = "1234234"


> gibt es da nix besseres? Es kann doch nicht sein das man bei einer
> Sprache wie C# das alles per hand machen muss.

s.o. oder Regex

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren