Avatar billede saudoo Nybegynder
30. november 2007 - 21:12 Der er 11 kommentarer og
2 løsninger

Omdanne indhold i string til 2-dimensionelt array i ASP.net

Hej Eksperten..

Nu er jeg ikke helt sikkert på om dette egentligt er hvad der er brug for. Det er dog så langt jeg kan tænke mig frem til hvordan det burde bliv lavet. Jeg ved en lille smule om regular expressions, men slet ikke nok til at arbejde med det følgende problem:

Hvis man forestiller sig at jeg har en string med tekst i og jeg alle de steder hvor der stod [billede]123[/billede] ville have flyttet 123 over i et array, og ligeledes alle de steder der stod [tekst]abc[/tekst] over i et andet array.

Håber i kan hjælpe mig med dette. :)
Avatar billede roenving Novice
01. december 2007 - 11:42 #1
Nu kan jg ikke helt huske den præcise behandling i C#, men regexp'erne skal være noget lignende:

@"[billede](.*?)[/billede]","RegEx.Modifiers.Global"

@"[tekst](.*?)[/tekst]","RegEx.Modifiers.Global"
Avatar billede nielle Nybegynder
01. december 2007 - 17:56 #2
Nu ved jeg så ikke lige hvor de 2-dimentilnelle kommer ind. Gætter på at du i virkeligheden mener to 1-dimentionelle arrays?

Det kan f.eks. gøres sådan her:

            string data = @"aa [billede]123[/billede] bb [billede]456[/billede] cc [tekst]abc[/tekst] dd [billede]456[/billede] ee [tekst]def[/tekst] ff [tekst]ghi[/tekst] gg [tekst]jkl[/tekst] hh [billede]789[/billede] jj
[billede]01011[/billede]
";

            Regex re1 = new Regex(@"\[billede\](.*?)\[/billede\]");
            Match rem1 = re1.Match(data);

            List<string> billedeList = new List<string>();
            while (rem1.Success)
            {
                string billede = rem1.Groups[1].Value;
                billedeList.Add(billede);

                rem1 = rem1.NextMatch();
            }

            Regex re2 = new Regex(@"\[tekst\](.*?)\[/tekst\]");
            Match rem2 = re2.Match(data);

            List<string> tekstList = new List<string>();
            while (rem2.Success)
            {
                string tekst = rem2.Groups[1].Value;
                tekstList.Add(tekst);

                rem2 = rem2.NextMatch();
            }

            // Du kan enten beholde dem som lister,
            // eller du kan konvertere til arrays:

            string[] billeder = billedeList.ToArray();
            string[] tekster = tekstList.ToArray();
Avatar billede saudoo Nybegynder
01. december 2007 - 20:17 #3
hehe..ja.. mente 1-dimensionelt, det var vist en tanketorsk fra min side..

I skal begge have mange tak.. jeg har fordoblet pointsne, så i begge kan få de 60 points. Ligger i ikke begge et svar? :) Mange tak for hjælpen
Avatar billede nielle Nybegynder
01. december 2007 - 20:41 #4
Svar :^)
Avatar billede saudoo Nybegynder
01. december 2007 - 21:01 #5
:) Jeg venter lige til roeving giver svar fra sig.. så skal jeg nok dele ud..

I mellemtiden jeg har lige fået kigget lidt på det, og har så fundet et problem som jeg ikke lige overvejede før. Måske kan du hjælpe mig med det. :)

Problemer er at når teksten bliver delt op i arrays så mister de forskellige elementer også sin rækkefølge.. Hvis man skal have det skrevet ud, kommer enten alle tekstelementer først og dernæst billedelementer, eller omvendt.

Har du en smart ide til hvordan man kan undgå dette? :)
Avatar billede nielle Nybegynder
01. december 2007 - 21:17 #6
Man kan f.eks. putte dem i samme array/liste?

            string data = @"aa [billede]123[/billede] bb [billede]456[/billede] cc [tekst]abc[/tekst] dd [billede]456[/billede] ee [tekst]def[/tekst] ff [tekst]ghi[/tekst] gg [tekst]jkl[/tekst] hh [billede]789[/billede] jj
[billede]01011[/billede]
";

            Regex re = new Regex(@"\[(billede|tekst)\](.*?)\[/\1\]");
            Match rem = re.Match(data);

            List<string> billedeEllerTekstList = new List<string>();
            while (rem.Success)
            {
                string billedeEllerTekst = rem.Groups[2].Value;
                billedeEllerTekstList.Add(billedeEllerTekst);

                Console.WriteLine(billedeEllerTekst);

                rem = rem.NextMatch();
            }

            // Du kan enten beholde det som en liste,
            // eller du kan konvertere til et array:

            string[] billederEllerTekst = billedeEllerTekstList.ToArray();
Avatar billede saudoo Nybegynder
01. december 2007 - 21:56 #7
Heh.. du må undskylde hvis dette er "newbie material".. Men.. Hvordan vil man kunne skille dem at, så man kan genkende dem fra tekst og billeder.

Problemet er at jeg skal smide indholder ind i controls.. Men for at kunne gøre det skal jeg kunne fortælle hvilken type det er.. f.eks. ved at tilføje txt: eller img: foran den string der bliver tilføjet til Listen.
Avatar billede nielle Nybegynder
01. december 2007 - 22:25 #8
Sådan?

            string data = @"aa [billede]123[/billede] bb [billede]456[/billede] cc [tekst]abc[/tekst] dd [billede]456[/billede] ee [tekst]def[/tekst] ff [tekst]ghi[/tekst] gg [tekst]jkl[/tekst] hh [billede]789[/billede] jj
[billede]01011[/billede]
";

            Regex re = new Regex(@"\[(billede|tekst)\](.*?)\[/\1\]");
            Match rem = re.Match(data);

            List<string> billedeEllerTekstList = new List<string>();
            while (rem.Success)
            {
                string matchType = = rem.Groups[1].Value;
                string billedeEllerTekst = rem.Groups[2].Value;
                billedeEllerTekstList.Add(matchType + ": " + billedeEllerTekst);

                Console.WriteLine(billedeEllerTekst);

                rem = rem.NextMatch();
            }

            // Du kan enten beholde det som en liste,
            // eller du kan konvertere til et array:

            string[] billederEllerTekst = billedeEllerTekstList.ToArray();
Avatar billede saudoo Nybegynder
01. december 2007 - 22:34 #9
Ah, ja.. Mange tak for din hjælp. Nu begynder jeg så småt at forstå hvad der egentligt sker. :)

Tror jeg smutter over og læser god op på Regular Expressions så jeg bliver en haj til det.. Det og Asp.Net's håndtering af det selvfølgelig. :)
Avatar billede roenving Novice
02. december 2007 - 11:02 #10
Velbekomme '-)
Avatar billede saudoo Nybegynder
02. december 2007 - 16:44 #11
Og endnu engang.. mange tak. :)
Avatar billede nielle Nybegynder
02. december 2007 - 19:13 #12
Selv tak for point :^)
Avatar billede roenving Novice
04. december 2007 - 00:13 #13
-- også jeg takker for point ;~}
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
Kurser inden for grundlæggende programmering

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