Avatar billede cmau Nybegynder
30. januar 2007 - 22:38 Der er 9 kommentarer og
1 løsning

Opdeling af linjer i fil.

Hejsa

Jeg skal nok have fat på noget regular expression til dette, men ved slet ikke hvor jeg skal begynde. Jeg har en fil med mange af disse linjer:

#30-01-2007##false##Afleverkemi##gdf gdf gdfg dfg dfg fdg fdg sdfg"#

En linje indikeres med en start # og hver gang der er dobbelt ## er det et nyt afsnit.
#date##birthday##title##text#

Hvordan kan jeg så lave en funktion, som kan modtage en dato og retunere de forskellige ting?
Avatar billede cmau Nybegynder
30. januar 2007 - 22:39 #1
Det skal lige siges at hvis birthday er false, skal den ikke tage højde for årstallet, den skal komme hvert år, da det er en fødselsdag.
Avatar billede thesurfer Nybegynder
30. januar 2007 - 23:32 #2
Hmm... Hvorfor starter og slutter linien med "#"?

Hvis det ser sådan ud:

#30-01-2007##false##Afleverkemi##gdf gdf gdfg dfg dfg fdg fdg sdfg"#
#29-01-2007##True##Fødselsdag##I dag er det min fødselsdag#

Fjern det første og sidste "#" så det ser sådan ud, og erstat "##" med "#":

30-01-2007#false#Afleverkemi#gdf gdf gdfg dfg dfg fdg fdg sdfg"
29-01-2007#True#Fødselsdag#I dag er det min fødselsdag


Så kan du nemlig nøjes med at splitte ved "#"..

Eksempel:

s = "29-01-2007#True#Fødselsdag#I dag er det min fødselsdag";
arr = s.Split("#")

Så har du:

arr[0] som er: 29-01-2007
arr[1] som er: True
arr[2] som er: Fødselsdag
arr[3] som er: I dag er det min fødselsdag
Avatar billede cmau Nybegynder
31. januar 2007 - 09:48 #3
Hvordan finder jeg så ud af om det er en linje? Den skal jo kører alle linjer igennem og finde den rigtige?
Avatar billede thesurfer Nybegynder
31. januar 2007 - 11:55 #4
Den rigtige? Hvad mener du med "den rigtige"?

Jeg gik ud fra, at du skulle bruge alle linier..

Et hurtigt kig (og læsning af indlæg) fortæller mig, at arr[1] er vigtigt, idet det fortæller koden om den skal bruge årstal eller ej.. hvilket gør arr[0] lidt vigtig også..


Giv et større eksempel, med flere linier og hvordan det virker..
Avatar billede cmau Nybegynder
31. januar 2007 - 13:06 #5
Altså jeg er ved at lave en kalender hvor jeg gemmer alle datoer i en tekst fil. Jeg er så ved at lave en funktion, som skal kunne finde linjen hvor en spiciel dato indgår og sætte den til newline også derefter ved jeg godt hvad jeg skal gøre.
Avatar billede cmau Nybegynder
31. januar 2007 - 13:07 #6
Datoen skal modtages som (day, month, yeah, birthday)

hvis birthday er true skal year være ligegyldig.
Avatar billede thesurfer Nybegynder
31. januar 2007 - 20:23 #7
Jeg tror stadig ikke at jeg forstår dig helt..

Jeg har forstået, at du vil løbe linierne igennem for at finde bestemte datoer.
Hvis birthday feltet er true, skal man se bort fra årstallet. Det er en simpel IF-sætning..

Hvad du så mener med at den skal "sætte den til newline", forstår jeg ikke..

Jeg vil prøve at lave et eksempel, og så kan du måske tage den derfra, eller forklare nærmere..
Avatar billede thesurfer Nybegynder
31. januar 2007 - 20:58 #8
Eksempel (jeg har smidt en knap med navnet "Button1" ind på formen):

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' Filen "k.txt" er filen der indeholder datoerne:
        Dim sr As New System.IO.StreamReader("k.txt", System.Text.Encoding.UTF7)

        Dim indhold As String ' definer en streng-variabler til at indeholde indholdet af filen
        indhold = sr.ReadToEnd() ' læs hele filen over i variablen
        sr.Close() ' luk forbindelsen til filen

        Dim linie As Array ' definer en array-variabel, til at indeholde linierne
        linie = Split(indhold, vbCrLf) ' split indholdet op i linier, og put dem i arrayet

        Dim i As Integer ' definer en tæller, som skal bruges i FOR-NEXT loopen
        Dim dele As Array ' definer en array, som skal indeholde delene, når vi splitter linier op

        Dim dag, maaned, aar As Integer ' definer integer-variabler, til at indeholde dag, måned og år

        For i = LBound(linie) To UBound(linie) ' kør en loop, fra først index i array, til sidste index
            dele = Split(linie(i), "#") ' split linien op ved "#" tegnet, og smid delene i dele-arrayet
            dag = Integer.Parse(Date.Parse(dele(0)).Day().ToString()) ' smid dagen over i dag-variablen
            maaned = Integer.Parse(Date.Parse(dele(0)).Month().ToString()) ' smid måneden over i måned-variablen

            If Boolean.Parse(dele(1)) = True Then ' check om birthday er true
                ' birthday er true.. nulstil år.. man kan gøre andet her, hvis det skulle være
                aar = -1
            Else
                ' birthday er false
                aar = Integer.Parse(Date.Parse(dele(0)).Year().ToString()) ' årstallet skal med: smid året over i aar-variablen
            End If
        Next

    End Sub
Avatar billede cmau Nybegynder
25. marts 2007 - 16:55 #9
Takker smid svar.
Avatar billede thesurfer Nybegynder
25. marts 2007 - 21:22 #10
Svar smidt :-)
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



IT-JOB