VB net - plik csv - wyrażenie regularne

0

Witam.

Robię prosty programik w VB net obrabiający dane z urządzenia pomiarowego z którego otrzymuję lekko pomieszany plik csv.
Jest w nim użyty przecinek jako separator pól i jako przecinek dziesiętny.

A wygląda to tak:
"Tekst1","1,2",0,"Tekst2","120",4,">30" itd.

Problem w tym, że nie mogę wpaść na to jak zamienić** , na . ale tylko w liczbie znajdującej się między przecinkami i w cudzysłowie czyli np.: ,"1,2",** ma dać** ,"1.2",**
Po tym już bez problemu wykona się prawidłowy split po** , **

Wiem, że chodzi o wyrażenia regularne, jednak jestem z tego noga.
Będę wdzięczny za wyrozumiałość i podpowiedź jak powinien wyglądać pattern i replacement dla regex.

Pozdrawiam

1

To chyba będzie tak. Ale to c#, konwertnij się.

    class Program
    {
        static void Main(string[] args)
        {
            string input = "\"Tekst1\",\"1,2\",0,\"Tekst2\",\"120\",4,\">30\"";
            string result;

            Regex rx = new Regex("\"\\d+,\\d+\"");
            result = rx.Replace(input, new MatchEvaluator(Program.Find));
            Console.WriteLine(result);

            Console.ReadKey();
        }
        
        static string Find(Match m)
        {
            return Regex.Replace(m.Value, ",", ".");
        }
    }

Edit: poprawka

0

Dzięki Dam1an, działa super, jednak dalej nie mogę zaskoczyć jak tworzy się klucz wyszukiwania.
Rozumiem, że d+ oznacza dowolne cyfry i ten przecinek między nimi to wymagana reguła dla znalezienia cyfr z przecinkiem między cudzysłowiami.
Jednak te ukośniki to już zagadka.

Niemniej dziękuję za pomoc i pozdrawiam.

0

\d - to jest dowolna liczba
+ oznacza powtórzenie raz lub więcej razy
Ponieważ \ dla c# jest to znak specjalny np stosowany w \n trzeba go powtórzyć drugim \
Ponieważ " też c# tak łatwo nie przyjmie trzeba go poprzedzić znakiem \

0

Dzięki za łopatologiczne wyjaśnienia. Teraz rozumiem przynajmniej ten przypadek.

A dla ścisłości w VB ma on postać:
Regex("""\d+,\d+""")
cudzysłowie razy dwa, bo właśnie tak kompilator uznaje, że chce użyć ten znak w regule.
Ale zasada taka jak pisałeś.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1