Jonas Skrevet 25. januar 2004 Del Skrevet 25. januar 2004 Hallo Hvordan kan jeg hente ut navn og legge det i en text boks og hente ut adresse og legge det i en annen text boks? <navn>Tore <adresse> oslo, lambertseter noe sånt som dette blir txt fila. Lenke til kommentar
aadnk Skrevet 25. januar 2004 Del Skrevet 25. januar 2004 Ganske enkelt. Først laster du alt inn i en array: Dim Buff$, Filnavn$ Dim DataArray() As String, Tell& Filnavn = App.Path & "\Data.txt" Open Filnavn For Input As #1 Do Until EOF(1) Line Input #1, Buff ReDim Preserve DataArray(Tell) DataArray(Tell) = Buff Tell = Tell + 1 Loop Close #1 ' Arrayen er loaded inn, last inn dataen: For Tell = LBound(DataArray) To UBound(DataArray) Buff = DataArray(Tell) If Mid(Buff, 1, 1) = "<" Then Select Case LCase(Mid(Buff, 2, InStr(1, Buff, ">") - 2)) Case "navn" Text1.Text = DataArray(Tell + 1) Case "addresse" Text2.Text = DataArray(Tell + 2) End Select End If Next Lenke til kommentar
svamp Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 (endret) Jeg brukte deler av koden din for å laste linjer i en tekstfil inn i en ComboBox. Men nå har jeg støtt på et problem. Koden ligger i en prosedyre i en modul. Koden kjøres ved oppstart av programmet, og ved åpning av en form der man kan legge til/ta vekk linjer fra tekst-filen. Problemet er at hver gang koden kjøres for 2. gang og mer, kommer det dobbelt opp med items i comboboxen. Eksempel: I liste.txt: hei hallo hardware I modulen: Public Sub Listedata() Dim strBuff As String Dim strFilNavn As String strFilNavn = App.Path & "\liste.txt" Open strFilNavn For Input As #1 Do Until EOF(1) Line Input #1, strBuff ReDim Preserve strListeArray(intTeller1) strListeArray(intTeller1) = strBuff intTeller1 = intTeller1 + 1 Loop intTeller1 = intTeller1 - 1 Close #1 End Sub I formen: Private Sub Form_Load() Dim intTeller2 As Integer comListe.Clear For intTeller2 = 0 To intTeller1 comListe.AddItem (strListeArray(intTeller2)) Next End Sub Regner med at det jeg må gjøre er å lage en løkke, og tømme hver "post" i arrayet (det går vel?). Søren, denne posten mista litt av meninga si nå, når jeg nesten svarte på mitt eget spørsmål.. [OT] Det er jo et kjempebra forum dette da, når man finner svar på spørsmålet sitt før man er ferdig å skrive det [/OT] Men det jeg også lurte på; fins det en enkelt kode som tømmer hele arrayet uten å bruke noen form for løkke? Noe på samme måte som å tømme combobox'en, combo1.clear. EDIT: Glemte å si, variablene intteller1 og strlistearray blir deklarert public i modulen. Endret 26. mai 2004 av svamp Lenke til kommentar
aadnk Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 Løsningen er som du sa; å tømme arrayen. Dette kan gjøres ved bruk av syntaksen Erase. Legg følgende kode i begynnelsen av Listedata: Erase strListeArray [OT] Å jo, dette er et bra forum. Det kan jeg si meg enig i. Jeg har selv opplevd å få svar på ett spørsmål bare 5-10 minutt etter jeg postet tråden. Imponerende! [/OT] Lenke til kommentar
svamp Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 Det fungerte . Fant ut at jeg også måtte sette intteller1 til 0 for ikke å få masse tomme items i comboboxen. Lenke til kommentar
svamp Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 Noen som vet hvordan jeg kan slette en linje fra den nevnte tekstfilen min, ved at brukeren velger et item i comboboxen på vanlig måte, og klikker "slett"? Lenke til kommentar
aadnk Skrevet 26. mai 2004 Del Skrevet 26. mai 2004 Jeg slang sammen en liten sub for å slette linjer i combobokser og lagre endringen. Her er koden: Public Sub DeleteLine(refComboBox As ComboBox, File As String, ItemIndex As Long) Dim Tell&, Free& ' Først sletter vi linjen i comboboksen refComboBox.RemoveItem ItemIndex ' Denne loop'en flytter alle elementene ett hakk ned For Tell = ItemIndex + 1 To UBound(strListeArray) strListeArray(Tell - 1) = strListeArray(Tell) Next ' Sletter så det siste elemetet totalt fra arrayen ReDim Preserve strListeArray(UBound(strListeArray) - 1) ' Så lagrer vi endringen: Free = FreeFile Open File For Output As Free For Tell = LBound(strListeArray) To UBound(strListeArray) Print #Free, strListeArray(Tell) Next Close Free End Sub Den brukes omtrent slik: DeleteLine Combo1, "C:\test.txt", Combo1.ListIndex Lenke til kommentar
Fiji Skrevet 8. juni 2004 Del Skrevet 8. juni 2004 Hei.. På en måte samme tingen =) og eg e nuub, skole greier, kan lite etc.. Så hvis noen gidd å ta seg litt tid for meg, vil eg bli veldig glad =) Men se da! jeg har 3 text boxer, og 2 knapper. textbox1: det er den text boxen all infoen skal komme inn i! textbox 2 hører til kanpp 1, som da når eg trykker knapp 1, skal den se ka jeg har skrevet inn i textbox 2, så skal den se f.eks jeg skrev.. "test", da skal den hente fra \rules\test.txt fram text som den skal plassere i text 1 Når eg trykker knapp 2, skal den hente ka eg skrev inn i textbox3, og da f.eks står det "test2", så skal den hente her, \sinfo\test2.txt Og plassere dette i text box 1. mvh fiji =) Lenke til kommentar
aadnk Skrevet 8. juni 2004 Del Skrevet 8. juni 2004 Joda, det skulle ikke være noe problem. Først kaller vi de forskjellige kontrollene med noen mer intuitive navn, slik at det blir lettere å forstå koden. txtInfo = Textbox 1 txtCommand1 = Textbox2 txtCommand2 = Textbox3 cmdCall1 = Knapp 1 cmdCall2 = Knapp 2 For å gi kontroller navn, trykker du på Properties vinduet og letter fram (Name). I tekstboksen ved siden av denne skriver du det nye navnet for kontrollen. Etter dette kan du bruke følgende kode for å utføre oppgaven du ønsket: ' Denne metoden laster inn all data fra hvilken som helst fil. Public Function LoadData(File As String) As String Dim Free As Long Free = FreeFile Open File For Binary As #1 LoadData = Space(LOF(1)) Get #1, , LoadData Close #1 End Function ' Denne metoden legger til en / i enden av strengen hvis den allerede ikke eksisterer. Public Function GetFullPath(Path As String) As String GetFullPath = Path & IIf(Right(GetFullPath, 1) = "/", "", "/") End Function Private Sub cmdCall1_Click() If txtCommand1.Text = "test" Then ' App.Path returnerer stien til programmet. GetFullPath må brukes ettersom ' noen stier slutter med "/", mens andre ikke. txtInfo.Text = LoadData(GetFullPath(App.Path) & "rules\test.txt") End If End Sub Private Sub cmdCall1_Click() If txtCommand1.Text = "test2" Then txtInfo.Text = LoadData(GetFullPath(App.Path) & "sinfo\test2.txt") End If End Sub mvh, aadnk Lenke til kommentar
Fiji Skrevet 8. juni 2004 Del Skrevet 8. juni 2004 Private Sub cmdCall1_Click() If txtCommand1.Text = "test" Then ' App.Path returnerer stien til programmet. GetFullPath må brukes ettersom ' noen stier slutter med "/", mens andre ikke. txtInfo.Text = LoadData(GetFullPath(App.Path) & "rules\test.txt") End If End Sub Private Sub cmdCall2_Click() If txtCommand1.Text = "test" Then txtInfo.Text = LoadData(GetFullPath(App.Path) & "sinfo\test.txt") End If End Sub Nå har jo jeg dette =) (ps det du visste meg funka det, og kom litt på vei med noen andre ting etc.. ) Men så skule eg tilbake til de txtCommand1 txtCommand2 Og ka dokkument den skal åpne! =) istedenfor å lage en ny "kode" for hver fil som skal være mulig å åpne, så skal eg kunne åpne f.eks hei.txt, når eg skriver hei i det feltet!.. Asså, den texten man skriver, så skal den åpne den .txt filen som har et fil navn som matcher denne infoen den henter ut fra text boxene =) mvh fiji Lenke til kommentar
aadnk Skrevet 8. juni 2004 Del Skrevet 8. juni 2004 (endret) Er ganske enig i at det er mye bedre å ha en tekst boks og en knapp for begge tekstfilene. Det gjør programmet mye mer oversiktlig og enklere, og er også den måten jeg selv ville løst det på. For å gjøre dette kan du fjerne txtCommand2, txtCall2 (og også eventuelt fjerne tallene etter txtCommand1 og txtCall1) og bruke denne koden: Private Sub cmdCall1_Click() Dim Path As String Select Case txtCommand1.Text Case "test" Path = "rules\test.txt" Case "test2" Path = "sinfo\test2.txt" End Select txtInfo.Text = LoadData(GetFullPath(App.Path) & Path) End Sub Endret 8. juni 2004 av aadnk Lenke til kommentar
Fiji Skrevet 8. juni 2004 Del Skrevet 8. juni 2004 (endret) Ja så litt på den der og, er sånn "øvings greien" visser litt om! Men synnes det blir et hælvete å skrive for sånn ca. 80 txt. filer, og en trigger for hver.. + at eg da må senere redigere programmer hver gang i VB når eg adder en txt fil :S Noe som da blir kjipt... Men ellers takk =) Men vil helst ha det sånn at, skriver eg noe i txtCommand1 og så trykker på kanppen som står ved den, som da er, cmdCall1 Skal den ta texten fra txtcommand1 og så åpne en .txt fil i mappen \rules skriver jeg Eirik åpner den Eirik.txt hvis den er der skriver jeg hei åpner den hei.txt hvis den er der.. er det som passer for den, så skjer ingenting! =) Klarte det selv! =) koden ble sånn =) Private Sub cmdCall2_Click() txtInfo.Text = LoadData(GetFullPath(App.Path) & "sinfo\" & txtCommand2.Text & ".txt") End Sub Egentlig ganske enkelt, men jeje.-.-. eg stressa med å få det til hele tiden et eller anna feil =) Men nå funker det =) takk for all hjelp =) Endret 9. juni 2004 av Fiji Lenke til kommentar
Blaster2k Skrevet 11. september 2004 Del Skrevet 11. september 2004 Hmz, jeg får ikke dette til, noen som hadde gidda å smekke sammen et eksempel på den første: <navn> Tore <adresse> oslo, lambertseter Lenke til kommentar
aadnk Skrevet 11. september 2004 Del Skrevet 11. september 2004 Her har du en rask sammensnekring av det første eksempelet: TextData.zip Lenke til kommentar
Blaster2k Skrevet 11. september 2004 Del Skrevet 11. september 2004 (endret) Takker så meget Endret 28. november 2004 av Blaster2k Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå