Avatar billede _et Praktikant
06. marts 2005 - 23:42 Der er 11 kommentarer og
2 løsninger

En lille streng splitter/parser

Jeg skal have lavet en splitter der laver streng "12345 67890" om til en streng der hedder "12345\n67890"

Jeg vil gerne have en færdig funtion.

Her er noget psudokode for at illustere hvordan

private string opdel(string txt, int længde)
{
  if (txt.count > længde)
      indsæt "\n" i "space" ved .count < længde;
        //( Hvis "space" eksisterer - ellers ved længde )
        //( Der må MAX være længde mellem "\n" - der skal altså måske indsættes flere "\n")
      return streng med "\n" indsat;
}
Mvh.
Teddy
Avatar billede Syska Mester
07. marts 2005 - 07:50 #1
Du har jo skrevet hvordan den skal laves... Så er det bare at oversætte dit Psudokodet il C#...
Avatar billede _et Praktikant
07. marts 2005 - 10:51 #2
Ja, men jeg kan ikke rigtig lige se hvordan jeg skal lave den.
Avatar billede quarter Nybegynder
07. marts 2005 - 10:55 #3
Kan du ikke lige give et lidt "udvidet" eksempel. Skal for eksempel "123 45 678910" blive til "123\n45\n678\n910" hvis længde er 3?
Avatar billede prec Nybegynder
07. marts 2005 - 11:53 #4
Hvorfor gøre det så kompliceret?

return txt.Replace(" ", "\n");
Avatar billede Syska Mester
07. marts 2005 - 11:58 #5
prec-> Hvor ikke læse spørgsmålet ordenligt?

Han skriver jo også at længden af bogstaver i træk heller ikke må blive over "længde" som er en input parameter....
Avatar billede Syska Mester
07. marts 2005 - 11:58 #6
bogstaver = tal
Avatar billede quarter Nybegynder
07. marts 2005 - 12:14 #7
Nå, jeg våger en løsning:
private string opdel(string txt, int længde)
{
    //String to return.
    string resultString = "";

    //Split string into substrings by blank char.
    string[] strings = txt.Split(new Char[] {' '});

    for(int i = 0; i <= strings.Length - 1; i++)
    {
        string s = strings[i];
        if (i == strings.Length -1)
        {
            if (s.Length <= længde)
                resultString += s;
            else
            {
                resultString += s.Substring(0, længde) + "\n";
                resultString += opdel(s.Substring(længde, s.Length - længde), længde);
            }
        }
        else
        {
            if (s.Length <= længde)
                resultString += s + "\n";
            else
            {
                resultString += s.Substring(0, længde) + "\n";
                resultString += opdel(s.Substring(længde, s.Length - længde), længde) + "\n";
            }
        }
    }           
    return resultString;
}
Avatar billede quarter Nybegynder
07. marts 2005 - 12:14 #8
vover... ikke våger. DOH!
Avatar billede _et Praktikant
07. marts 2005 - 22:40 #9
Den virker perfekt hvis der ikke er mellemrum.

Men hvis der er mellemrum, kommer der et problem.

her er et eks.

opdel("aaaaaaaaa aaa aaa", 10)

den retunerer:
"aaaaaaaaa\naaa\naaa"

Hvor den skulle lave
"aaaaaaaaa\naaa aaa"

Jeg har godt nok ikke sagt at den skal udfulde hele længden (hvis den kan)
Kan den rettes så den kan det?

Den skal nemlig klippe noget tekst, og hvis den ikke "prøver" at fylde ud bliver det jo kun til: 1 ord, enter, 1 ord, enter, 1 ord.......
Avatar billede quarter Nybegynder
08. marts 2005 - 08:43 #10
Vi laver den da bare lige hurtigt om. :o) Jeg var også lidt i tvivl om hvordan den helt præcist skulle virke.
Avatar billede Syska Mester
08. marts 2005 - 09:06 #11
Så kommer det stadig til at se mærkeligt ud på dine linier hvis du ikke bruger en monospaced font?
1111111111
mmmmmmmmmm
med mindre den er monospaces som den der bliver brugt i skrive feltet her, men det er den ikke når den bliver vist efter man har postet det
Avatar billede quarter Nybegynder
08. marts 2005 - 09:41 #12
Prøv lige den her. Den fjerner også eventuelle startende og sluttende mellemrum.

private bool StringWillBeCut(string txt, int længde)
{
    char chSpace = ' ';
    if (txt.Length > længde)
    {
        if (txt[længde-1].CompareTo(chSpace) != 0 && txt[længde].CompareTo(chSpace) != 0)
            return true;
        else
            return false;
    }
    else
        return false;
}

private string opdel(string txt, int længde)
{
    //String to return.
    string resultString = "";

    char chSpace = ' ';
    txt = txt.TrimStart(chSpace);
    txt = txt.TrimEnd(chSpace);

    if (StringWillBeCut(txt, længde))
    {
        //find last space, if any in substring(txt.længde).
        //if no space, just cut string in half at længde.               
        string subString = txt.Substring(0, længde);               
        int lastIndexOfSpace = subString.LastIndexOf(chSpace);
        if (lastIndexOfSpace >= 0)
        {
            //Space found.
            resultString += txt.Substring(0, lastIndexOfSpace) + "\n";
            resultString += opdel(txt.Substring(lastIndexOfSpace), længde);
        }
        else
        {
            //Space not found.
            resultString += txt.Substring(0, længde) + "\n";
            resultString += opdel(txt.Substring(længde), længde);
        }
    }
    else
    {
        if (txt.Length > længde)
        {
            resultString += txt.Substring(0, længde) + "\n";
            resultString += opdel(txt.Substring(længde), længde);
        }
        else
            resultString += txt;
    }
    return resultString;
}
Avatar billede _et Praktikant
08. marts 2005 - 22:22 #13
Den virker udemærket nu.
Det hjalp med monospace :-)
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