Autor Beitrag
_Joe_
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47

Arch Linux/XP
VS2008 Prof.,Codeblocks
BeitragVerfasst: Mi 08.04.09 20:52 
Hallo,

irgend sehe ich denn Wald vor lauter bäumen nicht.

mein String:
"-0.5 -0.18575 0.0125;";"0.5 0.18575 0.0125;";"0.5 -0.18575 0.0125;";"0.5 -0.18575 0.009000001;";"-0.5 -0.18575 0.009000001;";"-0.5 -0.16425 -0.0125;";"0.5 0.18575 -0.0125;";"-0.5 0.18575 -0.0125;";"-0.5 0.18575 0.0125;";"0.5 -0.16425 -0.0125;";

daraus sollen double werte werden. So sieht mein Ansatz aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
   List<double> blub(string content)
        {
            List<double> mylist = new List<double>();
            Regex regular = new Regex(????????????);
            foreach (string ss in regular.Split(content))
            {
                mylist.Add(Convert.ToDouble(ss));
            }

            return mylist;
        }


Kann mir vielleicht jemand bei dem regulären Ausdruck helfen?


Moderiert von user profile iconKha: Topic aus IO, XML und Registry verschoben am Mi 08.04.2009 um 23:29
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 08.04.09 23:25 
"helfen" ist gut, wenigstens ein Ansatz wäre schön gewesen :nixweiss: . Mit
ausblenden Quelltext
1:
("(...);";)+					

und Regex.Match hättest du schonmal die Double-Dreierpacks in Groups[2].Captures. Jetzt musst du noch das ... durch einen Ausdruck für diese Packs ersetzen.

_________________
>λ=
_Joe_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47

Arch Linux/XP
VS2008 Prof.,Codeblocks
BeitragVerfasst: Do 09.04.09 12:12 
Kann man irgendwie nach einem Anführungszeichen suchen bzw. wie trage ich Anführungszeichen in einen Regulären Ausdruck ein?

dachte an sowas: Regex regu = new Regex(" |;";|" "); und dann eben immer splitten wenn ein Leerzeichen, ;"; oder Anführungsstriche kommen.

*edit*

Regex regu = new Regex(" |;\";|\" ") funktioniert nur nicht ich bekomme dann "\"-0.5" warum auch immer :nixweiss:

*edit*

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
      List<double> blub(string content)
        {
            CultureInfo en = new CultureInfo("en-US");
            List<double> mylist = new List<double>();
            content = content.Remove(content.Length - 3);
            content = content.Remove(01);
            Regex regu = new Regex(" |;\";\"");
            foreach(string ss in regu.Split(content))
            {
                mylist.Add(Convert.ToDouble(ss,en));
            }
            for (int i = 0; i < 12;i++)
            {
                Console.WriteLine(mylist[i]);
            }
            return mylist;
        }


hmm nicht schön aber funktioniert erstmal
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Do 09.04.09 13:20 
Ich würde eher den Weg über Regex.Matches gehen anstatt zu splitten.

mit dem Regexpattern
ausblenden Quelltext
1:
2:
([+-]*[0-9]+(.[0-9]+){0,1})
//editiert damit auch 0 gefunden wird


Da müsstest du eine MatchCollection zurückkriegen die jede double-Zahl als Match enthält (kannst du einfach per Schleife dann durchlaufen)


Zuletzt bearbeitet von bakachan am Do 09.04.09 16:03, insgesamt 2-mal bearbeitet
_Joe_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47

Arch Linux/XP
VS2008 Prof.,Codeblocks
BeitragVerfasst: Do 09.04.09 13:46 
bei deinem Beispiel wäre die Null ein Problem weil immer . vorkommen muss und eine Nachfolge Zahl
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 09.04.09 14:01 
Um die Zahlen würde ich mich gar nicht kümmern, das soll double.Parse erledigen. Mein Ausdruck von oben wäre damit insgesamt
ausblenden Quelltext
1:
("([^"]+);";)+					

Die Captures von Gruppe 2 zerlegst du dann noch mit string.Split(null) an den Leerzeichen, fertig.

_________________
>λ=
_Joe_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47

Arch Linux/XP
VS2008 Prof.,Codeblocks
BeitragVerfasst: Do 09.04.09 15:52 
ich habe mal Kha sein beispiel ausprobiert dabei erhalte ich:

ausblenden C#-Quelltext
1:
2:
            Regex reg = new Regex("(\"([^\"]+);\";)+");
            Match matches = reg.Match(content);


base {System.Text.RegularExpressions.Group} = {"-0.5 0.03 0;";"0.1 0.03 0;";"-0.09999999 -0.03 0;";"0.5 -0.03 0;";}

Ich glaube das ist nichts ganz was du damit bewirken wolltest.


Wenn ich bakachan sein Beispielt ausprobier bekomme ich irgendwann eine Menge {0 0}.

Gibt es eine brauchbare Seite die, die Syntax der Regulären Ausdrücke beschreibt?
bakachan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 503
Erhaltene Danke: 34

W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
BeitragVerfasst: Do 09.04.09 15:59 
user profile icon_Joe_ hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich bakachan sein Beispielt ausprobier bekomme ich irgendwann eine Menge {0 0}.

Seltsam wenn ich das durch Regex-Lab jage (mit dem textbeispiel von dir oben) hab ich genau für jede double-Zahl nen Match in der Collection


Hier nen Regex-Tutorial:
www.mycsharp.de/wbb2...d.php?threadid=41009
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Do 09.04.09 16:17 
user profile icon_Joe_ hat folgendes geschrieben Zum zitierten Posting springen:
Ich glaube das ist nichts ganz was du damit bewirken wolltest.
Doch, wahrscheinlich schon ;) . Mein Regex matcht ja den gesamten Text, danach musst du den Match wie schon zweimal beschrieben noch zerlegen.
Einloggen, um Attachments anzusehen!
_________________
>λ=
_Joe_ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 47

Arch Linux/XP
VS2008 Prof.,Codeblocks
BeitragVerfasst: Do 09.04.09 19:32 
user profile iconbakachan hat folgendes geschrieben Zum zitierten Posting springen:
user profile icon_Joe_ hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich bakachan sein Beispielt ausprobier bekomme ich irgendwann eine Menge {0 0}.

Seltsam wenn ich das durch Regex-Lab jage (mit dem textbeispiel von dir oben) hab ich genau für jede double-Zahl nen Match in der Collection


Hier nen Regex-Tutorial:
www.mycsharp.de/wbb2...d.php?threadid=41009


Das Beispiel ist nur raus gegriffen ich hab davon seitenweise in xml Dateien. Der Fehler tritt genau dann ein wenn eine Folge mit 0 0 kommt.
Danke schönes Tutorial.


Kha dir kann ich irgendwie nicht ganz folgen. :gruebel:

*edit*

ausblenden C#-Quelltext
1:
("[+-]?[0-9]+([.][0-9]+)?");					


So klappt es Danke euch beiden :zustimm: