Avatar billede terra Nybegynder
16. januar 2004 - 02:04 Der er 11 kommentarer og
2 løsninger

Hente til textboxer fra en *.txt database

Jeg skal lave en form med textboxe som henter fra en:
textdatabase.txt

Teksten i textdatabase.txt er separert med '~' sådan:

RefNr~Tittel~Nummer~Mengde
45824~Rexona~8514~20
45824~Bizkit~4512~3
45825~Simba~428~5

Formen skal åbne med andet linie da den første er feltnavn.
CommandButton skal vise fra neste rad / gå ned.

Er det noen som kan hjelpe litt her?
Avatar billede zyco_dk Nybegynder
16. januar 2004 - 02:08 #1
kan du ike forklare det lidt beder? *SS*
Avatar billede terra Nybegynder
16. januar 2004 - 02:24 #2
Hi Zyco_dk :)
Dvs.:
Text1.text = 45824
Text2.text = Rexona
Text3.text = 8514
Text4.text = 20
Avatar billede sjh Nybegynder
16. januar 2004 - 06:06 #3
Prøv den her. Husk at tilføje Text1, Text2, Text3, Text4 og en HScroll1


'----------------------------------- Form1 -----------------------------------
Option Explicit

Private TextData() As String

'Denne funktion bruges hvis du ikke har VB6 (Split)
Public Function SplitString(ByVal strIn As String) As Variant
Dim i As Long
Dim strOne As String
Dim intSel As Integer
Dim arrOut(3) As String
  For i = 1 To Len(strIn)
    strOne = Mid$(strIn, i, 1)
    Select Case strOne
          Case "~" '<- Split
            intSel = intSel + 1
          Case Else
            arrOut(intSel) = (arrOut(intSel) & strOne)
    End Select
  Next
SplitString = arrOut()
End Function

Public Function LoadTextData(ByVal strFile As String) As Long
Dim lngLine As Long
Dim strLine As String
Dim intFree As Integer

  lngLine = -1
  intFree = FreeFile
  ReDim TextData(0) As String

  Open strFile For Input As #intFree
    Do While Not EOF(intFree)
      Line Input #intFree, strLine

      If strLine <> "" Then
        lngLine = (lngLine + 1)
        ReDim Preserve TextData(lngLine) As String
        TextData(lngLine) = strLine
      End If

    Loop
  Close #intFree

  LoadTextData = lngLine
End Function

Public Sub Update(ByVal Index As Long)
Dim arrData As Variant
  'Hvis du bruger VB6 kan du bruge Split
  'arrData = Split(TextData(Index), "~")

  'Hvis du ikke har VB6 så brug SplitString
  arrData = SplitString(TextData(Index))

  Text1.Text = arrData(0)
  Text2.Text = arrData(1)
  Text3.Text = arrData(2)
  Text4.Text = arrData(3)
End Sub

Private Sub Form_Load()
  HScroll1.Max = LoadTextData("C:\textdatabase.txt")
  Call Update(0)
End Sub

'HScrollBar til at vælge med.
Private Sub HScroll1_Change()
  Call Update(HScroll1.Value)
End Sub

'HScrollBar til at vælge med.
Private Sub HScroll1_Scroll()
  Call Update(HScroll1.Value)
End Sub
'----------------------------------- Form1 -----------------------------------
Avatar billede martin_moth Mester
16. januar 2004 - 07:53 #4
Samme løsning som shj (tror jeg), bare skrevet lidt kortere, hvis du har brug for overblik ;o)

dim i as long
dim MyArray() as string
dim SplitArray(3) as string
open "c:\textdatabase.txt for input as #1
while not eof(1)
  redim preserve MyArray(i)
  Line Input #1, MinString
  i = i+1
wend
close #1

'Nu har du et array MyArray, som ser ud som følger:

'MyArray(0) = "RefNr~Tittel~Nummer~Mengde"
'MyArray(1) = "45824~Rexona~8514~20"
'MyArray(2) = "45824~Bizkit~4512~3"
'osv.

'Indlæs fx. MyArray(1) i textboxe

SplitArray = Split(MyArray(1), "~")
Text1.Text = SplitArray(0)
Text2.Text = SplitArray(1)
Text3.Text = SplitArray(2)
Text4.Text = SplitArray(3)
Avatar billede martin_moth Mester
16. januar 2004 - 18:46 #5
Hvis du havde en "rigtig" database og ikek en textfil, kunne du binde dine textboxe til felter i tabellen, så de automatisk blev indlæst og opdateret osv. Bare til orientering
Avatar billede terra Nybegynder
17. januar 2004 - 00:38 #6
Jeg bruger VB 6
martin_moth-> Jeg prøver at teste MyArray(1) via MsgBox.
Jeg har ingen valg her, jeg må hent fra den *txt

Private Sub Form_Load()
Dim i As Long
Dim MyArray() As String
Dim SplitArray(3) As String
Open "C:\WINDOWS\Skrivebord\textdatabase.txt" For Input As #1
While Not EOF(1)
  ReDim Preserve MyArray(i)
  Line Input #1, MinString
  i = i + 1
Wend
Close #1

MsgBox MyArray(1) 'er empty

End Sub
Avatar billede terra Nybegynder
17. januar 2004 - 01:44 #7
sjh-> Text1.Text = arrData(0) blir forkert
Msg: Method or datamember not found

'Text1.Text = SplitArray(0)' med'her kan kjøre formen, ?:
Text2.Text = SplitArray(1)
Text3.Text = SplitArray(2)
Text4.Text = SplitArray(3)

+ Spm: Hvordan kan jeg starte fra linie 2,
dvs., ikke hente overste teksten: RefNr~Tittel~Nummer~Mengde?

MVH Terra
Avatar billede sjh Nybegynder
17. januar 2004 - 05:22 #8
Hvordan kan jeg starte fra linie 2.. den skulle være der nu..

Public Function LoadTextData(ByVal strFile As String) As Long
Dim i      As Long
Dim lngLine As Long
Dim strLine As String
Dim intFree As Integer

  lngLine = -1
  intFree = FreeFile
  ReDim TextData(0) As String

  Open strFile For Input As #intFree
    Do While Not EOF(intFree)
      Line Input #intFree, strLine

      i = i + 1
      If strLine <> "" And (i > 1) Then
        lngLine = (lngLine + 1)
        ReDim Preserve TextData(lngLine) As String
        TextData(lngLine) = strLine
      End If

    Loop
  Close #intFree

  LoadTextData = lngLine
End Function

den anden forstår jeg ikke lige men prøv med:

  Text1.Text = CStr(arrData(0))
  Text2.Text = CStr(arrData(1))
  Text3.Text = CStr(arrData(2))
  Text4.Text = CStr(arrData(3))

eller også hvis du bruger VB6 så er det vist nok:

  Dim arrData() As String
Avatar billede sjh Nybegynder
17. januar 2004 - 05:27 #9
det kunne også være under SplitString()

ret:
Dim arrOut(3) As String
til:
Dim arrOut(0 To 3) As String

ellers hvilket VB version bruger du??
Avatar billede martin_moth Mester
17. januar 2004 - 10:06 #10
terra: begynd med at læs en bog eller en tutorial om VB før du går i gang med at kode - du sparer meget tid ved det!
Avatar billede martin_moth Mester
17. januar 2004 - 10:07 #11
Fejlen i min kode er
  Line Input #1, MinString
Der skal hedde
  Line Input #1, MyArray(i)
Det ville du kunne finde ud af ved lige at kikke 5 sek på hvordan koden virker :o)
Avatar billede martin_moth Mester
17. januar 2004 - 10:09 #12
shj: Han bruger VB6, og Dim arrOut(3) As String er rigtigt!
Avatar billede terra Nybegynder
17. januar 2004 - 20:23 #13
Tusind tak for hjelpen
Feilen var i min Text1 :) boxen og den går bar nu med
Text1.Text = arrData(0)

martin_moth -> Ingen er perfekt ;) Ha en fin kveld
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