Forum: PC-Programmierung C# Zahl(double) aus String parsen


von tobi (Gast)


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

von Peter II (Gast)


Lesenswert?

double.parse('23.12');

von tobi (Gast)


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.

von Peter II (Gast)


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.

von chrimbo (Gast)


Lesenswert?

double.parse(mystring.substring(int start, int length))?

von Arc N. (arc)


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

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.