Avatar billede jih Nybegynder
06. november 2012 - 10:39 Der er 5 kommentarer og
1 løsning

Finde bestemte dato ud fra string

Hej, jeg prøver at få et program at sige fra, hvis der er nogle datoer i en string der er 7 eller mindre dage frem.

Jeg har denne kode indtil videre, men jeg er låst fast og aner ikke hvordan jeg videre skal tjekke min string for enkelte dates.. Jeg har fået datoerne til at fylde en String, hvor de er skilt ad med vbNewLines. Sig endelig til hvis der er en simplere måde ;)

koden i frmMain.Load:
---------------------
Dim Reader As System.IO.StreamReader
        Dim intI As Integer
        Dim tempString As String = ""
        Dim strLines() As String
        Reader = New System.IO.StreamReader(strPath & "\" & strFile)
        strLines = Strings.Split(Reader.ReadToEnd, Environment.NewLine)
        Dim dato(strLines.Length - 2) As Date
        For intI = 0 To dato.Length - 1
            dato(intI) = Mid(strLines(intI), 1, 10)
            tempString &= dato(intI) & vbNewLine
        Next intI
        Reader.Close()
----------------------------------------------

Nogen der kan hjælpe mig med dette? Jeg har stirret mig blind på dette problem i flere dage nu, aner ikke hvordan jeg kommer videre :/
Avatar billede finb Ekspert
06. november 2012 - 10:51 #1
prøv cDate,
cDate kan få en dato ud af det meste,
selv sko-nr.
Avatar billede fladstrand Nybegynder
06. november 2012 - 10:54 #2
Prøv evt. dette:
        For intI = 0 To dato.Length - 1
            dato(intI) = Mid(strLines(intI), 1, 10)

            'Tjek 7 dage frem
            If dato(intI) < DateTime.Now.AddDays(7) Then

            End If

            'tempString &= dato(intI) & vbNewLine
        Next intI
Avatar billede jih Nybegynder
06. november 2012 - 11:12 #3
Tak for det, men nu skal jeg så loope igennem tempString, men hvordan gør jeg det?
For intI = 0 To (lines in tempString)
  If (current line in tempString <= DateTime.Now.AddDays(7)) Then
    MsgBox(current line in tempString)
  End If
Next

Hvordan finder jeg "lines" og "current line"?
Avatar billede jih Nybegynder
06. november 2012 - 12:15 #4
Eller det vil sige at jeg nok skal bruge CDate også:

For intI = 0 To (lines in tempString)
  Dim tempDate as Date = CDate(current line in tempString)
  If (tempDate <= DateTime.Now.AddDays(7)) Then
    MsgBox(tempDate)
  End If
Next

Er det overhovedet muligt, eller skal jeg ændre det til array/collection/list?
Avatar billede jih Nybegynder
07. november 2012 - 12:22 #5
Jeg har fundet ud af det, men det ser lidt rodet ud.. Der må være en pænere, simplere måde?

Her er hvad jeg har:
-------------------------
Dim dato(strLines.Length - 2) As Date

' Første loop tjekker hvor mange datoer der er 7 dage frem
For intI = 0 To dato.Length - 1
  dato(intI) = Mid(strLines(intI), 1, 10)
  If (dato(intI) <= DateTime.Now.AddDays(7)) Then
    intJ += 1
  End If
Next intI
' Så jeg kan "Dimme" tempDate
Dim tempDate(intJ - 1) As Date
intJ = 0

' Næste loop tilføjer datoerne til et array
For intI = 0 To dato.Length - 1
  If (dato(intI) <= DateTime.Now.AddDays(7)) Then
    tempDate(intJ) = dato(intI) & vbNewLine
    intJ += 1
  End If
Next intI

' Tredje loop tjekker arrayet med linjerne i min txt fil, og skriver den fulde linje i en MsgBox
For intI = 0 To strLines.Length - 2
  For intJ = 0 To tempDate.Length - 1
    If (Mid(strLines(intI), 1, 10) = tempDate(intJ)) Then
      MsgBox(strLines(intI))
    End If
  Next intJ
Next intI
--------------

Det kan måske gøres pænere, men jeg ved ikke hvordan..?
Avatar billede jih Nybegynder
10. november 2012 - 12:24 #6
Ingen der kan hjælpe? Den siger også fra hvis det er i dag eller før, det skal den ikke..
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