Avatar billede bongo20 Nybegynder
11. februar 2004 - 10:11 Der er 6 kommentarer og
1 løsning

string split

Jeg har en kommasepareret fil som skal splittes op.

string [] Split = sTempLine.Split(new Char [] {','});

Denne linje deler min streng op ved hvert komma og smider hver enkelt element i et array.

Det jeg gerne vil kunne gøre er at splitte min streng op på mere end et komma, nemlig på strengen ('", "') i stedet for (','), for at undgå at den deler på kommaer i den egentlige tekst.

Jeg ved ikke om det kan lade sig gøre med split, men findes der ellers andre måder at gøre det på ?
Avatar billede arne_v Ekspert
11. februar 2004 - 10:20 #1
Prøv og check dette lille eksempel:

using System;
using System.Text;
using System.Text.RegularExpressions;

class MainClass
{
    public static void replaceandsplit(string s)
    {
        string[] s2 = s.Replace("\"","").Split(",".ToCharArray());
        for(int i = 0; i < s2.Length; i++)
        {
            Console.WriteLine("  " + s2[i]);
        }
    }
    public static void splitandreplace(string s)
    {
        string[] s2 = s.Split(",".ToCharArray()); 
        for(int i = 0; i < s2.Length; i++)
        {
            Console.WriteLine("  " + s2[i].Replace("\"",""));
        }
    }
    public static void manualparse(string s)
    {
        StringBuilder sb = new StringBuilder();
        int ix = 0;
        bool inq = false;
        while(ix < s.Length)
        {
            switch(s[ix])
            {
                case '"':
                    if(inq)
                    {
                        if(((ix + 1) < s.Length) && (s[ix + 1] == '"'))
                        {
                            sb.Append(s[ix]);
                            sb.Append(s[ix]);
                            ix++;
                        }
                        else
                        {
                            inq = false;
                        }
                    }
                    else
                    {
                        inq = true;
                    }
                    break;
                case ',':
                    if(inq)
                    {
                        sb.Append(s[ix]);
                    }
                    else
                    {
                        Console.WriteLine("  " + sb.ToString());
                        sb = new StringBuilder();
                    }
                    break;
                default:
                    sb.Append(s[ix]);
                    break;
            }
            ix++;
        }
        if(sb.Length > 0)
        {
            Console.WriteLine("  " + sb.ToString());
        }
    }
    public static void regexparse(string s)
    {
        MatchCollection res = Regex.Matches(s,"([0-9]+)|([\"]{1}(([^\"])|(\"\"))*[\"]{1})");
        for(int i = 0; i < res.Count; i++) {
            string s2 = res[i].Value;
            if(s2[0]=='"')
            {
                Console.WriteLine("  " + s2.Substring(1, s2.Length - 2));
            }
            else
            {
                Console.WriteLine("  " + s2);
            }
        }
    }
    private static void test(string s)
    {
        Console.WriteLine(s);
        Console.WriteLine("replace and split: ");
        replaceandsplit(s);
        Console.WriteLine("split and replace: ");
        splitandreplace(s);
        Console.WriteLine("manual parse: ");
        manualparse(s);
        Console.WriteLine("regex parse: ");
        regexparse(s);
    }
    public static void Main(string[] args)
    {
        test("123,\"abc\",\"\"\"quoted\"\"\",\"partly \"\"quoted\"\" !\",\"a,b,c\"");
    }
}
Avatar billede bongo20 Nybegynder
11. februar 2004 - 10:30 #2
ser ikke helt tosset ud, men hvordan Replacer jeg to " er det noget med (char)34 ??
Avatar billede arne_v Ekspert
11. februar 2004 - 10:42 #3
" inden i en streng er \"
Avatar billede bongo20 Nybegynder
11. februar 2004 - 10:46 #4
ok,.men hvad er der så galt med denne: Replace("\", \"", "\")

Skulle den ikke lave  ", "  om til  \    ?
Avatar billede bongo20 Nybegynder
11. februar 2004 - 10:50 #5
min fejl: Replace("\", \"", "\"")
Sådan virker det.--
Avatar billede arne_v Ekspert
11. februar 2004 - 17:23 #6
OK at jeg liger et svar ?
Avatar billede bongo20 Nybegynder
29. februar 2004 - 19:43 #7
ja klart, tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Styrelsen for Grøn Arealomlægning og Vandmiljø

Teamleder til Application Management

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

Netcompany A/S

Linux Operations Engineer

Politiets Efterretningstjeneste

AI/ML udvikler i PET