Avatar billede kasperks Nybegynder
01. august 2005 - 16:08 Der er 11 kommentarer

Anvende grupper til at løse et 1-n problem

Hej

Jeg skriver bedst på engelsk, håber det er ok. Ellers bed mig om at oversætte. :)


I have some data which has a structure something like this:

Header 1
- Item 1
- Item 2
- Item 3

Header 2
- Item 4
- Item 5

Header 3
- Item 6
- Item 7
- Item 8
- Item 9

Getting all headers is easy
Getting all items is easy
Getting a list of which items belong to which headers is... less than easy (for me anyway). ;)

I want to execute a regular expression and get 9 matches like this:

Header 1 - Item 1
Header 1 - Item 2
Header 1 - Item 3
Header 2 - Item 4
Header 2 - Item 5
Header 3 - Item 6
Header 3 - Item 7
Header 3 - Item 8
Header 3 - Item 9

...With the header in group 1 and the item in group 2. Is that possible? If so, how?

Any help would be greatly appreciated! :)

Thanks in advance
Avatar billede nielle Nybegynder
01. august 2005 - 19:21 #1
I hvilket programmeringssprog?
Avatar billede kasperks Nybegynder
03. august 2005 - 14:06 #2
vb.net
Avatar billede nielle Nybegynder
03. august 2005 - 22:09 #3
Hmm, er det et absolut krav at denne opgave skal løses via Reg.Exp.?

Umiddelbart er den nemlig rimelig let at løse uden.
Avatar billede arne_v Ekspert
03. august 2005 - 22:46 #4
forslag:


    Public Shared Sub Parse(ByVal s As String)
        Dim res As MatchCollection = Regex.Matches(s, "(^[^-].+$)(" & Microsoft.VisualBasic.Chr(10) & "^- .+$)*", RegexOptions.Multiline)
        Dim i As Integer
        For i = 0 To res.Count -1
            Dim res2 As MatchCollection = Regex.Matches(res(i).Groups(0).Value, "^- (.+)$", RegexOptions.Multiline)
            Dim j As Integer
            For j = 0 To res2.Count - 1
                Console.WriteLine(res(i).Groups(1).Value.Replace(Convert.ToChar(13), "") + " - " + res2(j).Groups(1).Value)
            Next
        Next
    End Sub
Avatar billede nielle Nybegynder
03. august 2005 - 22:55 #5
Arne, det der er da ikke en helt ren RegExp-løsning...
Avatar billede arne_v Ekspert
03. august 2005 - 22:59 #6
nej

jeg har svært ved at se hvordan man for samme header returneret flere gange

og så er en regex jo svær at bruge
Avatar billede arne_v Ekspert
03. august 2005 - 23:00 #7
Microsoft.VisualBasic.Chr(10) skulle iøvrigt være Convert.ToChar(10)
Avatar billede nielle Nybegynder
04. august 2005 - 09:35 #8
Det ser bestemt ikke ud til at der er nogen elegant løsning med RegExp. Personligt ville jeg da også bare læse denne uden:

Dim SR As StreamReader = New StreamReader("C:\ ... \TextFile1.txt")

Dim Line As String = ""
Dim Header As String = ""

Do
    Line = SR.ReadLine()
    If (Line = "") Then
        Header = ""
    ElseIf (Line.StartsWith("- ")) Then
        Console.WriteLine(Header + " " + Line)
    Else
        Header = Line
    End If
Loop Until Line Is Nothing

SR.Close()

- men det kan jo være et decideret krav at det *skal* gøres med RegExp?
Avatar billede nielle Nybegynder
08. august 2005 - 19:28 #9
Hvad med noget respons her?
Avatar billede nielle Nybegynder
16. august 2005 - 18:04 #10
?
Avatar billede nielle Nybegynder
03. december 2007 - 19:55 #11
Lukketid?
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