28. juli 2003 - 12:35Der er
14 kommentarer og 1 løsning
kopiere text fra fil at anden
Hej Eksperter Jeg åbner en række textfiler ( en for en ) over i en Textbox. Nu vil jeg gerne "klippe" 2 linier ud fra text-filerne. LinieX hedder ActiveNo XXXXX LinieY hedder Type YYYYY Linerne begynder altid med ActiveNo og Type, men XXXXX og YYYYY er altid forskelligt. Men altid 5 tegn, men desværre ikke samme linienr. Kan man smidde dette over i en ny textbox og så kunne gemme denne fil. Det hele ville jo være perfekt hvis man kunne vælge X-antal filer og klikke på "Make IT" og så vupti de nye filer bliver oprettet automatisk med fortløbne filnavne. Men måske dette skal være nyt spørgsmål, hvis det når så langt. vh thjoe
Antager at du har aabnet filen som #1 og dimensioneret ActiveNo og Type
Dim strTemp as string
while not EOF(#1) input #1, ActiveNo, Type if ActiveNo = xxxxxx and type = yyyyy then strTemp = form.textbox.caption form.textbox.caption = strTemp & ActiveNo & Type end if wend
Du skal sikkert formatere indholdet af textboxen lidt bedre, men maaske var det nemmere at bruge en listbox eller combobox og .AddItem istedet
Synes godt om
Slettet bruger
28. juli 2003 - 12:41#2
Du kan bruge Instr til at søge efter dine tekster. Hvis du ved at der altid kommer en ny linie efter kan du jå søge fra den først fundne til der kommer et linieskift(vbCrLf) og så kopiere ud med Mid funktionen, om du lægger det i en ny tekstbox eller i en variabel er ligemeget. Til sidst opretter du jo bare en ny fil og smider indholdet i den.
Der kommer altid "ny linie" efter det jeg skal bruge. Jeg har ikke Dim'et ActiveNO og Type. Er lidt i tvivl hvordan. Min "Lille smipel" kode ser pt. sådan ud:
Dim FileName As String Dim FileNr As Integer Dim txt As String FileName = "C:\html\htmless\html\txt\25917.txt" FileNr = FreeFile Open FileName For Input As FileNr txt = Input(LOF(FileNr), FileNr) Text1 = txt Close (FileNr)
hvis du har ActiveNo og Type i hver linje kan du loebe igennem hele filens indhold og finde de linjer hvor ActiveNo = xxxx og type = yyyy som jeg foreslog. Derefter kan du saa enten overfoere dem til en textbox eller, hvis du har flere filer du vil hente fra, gemme linjerne i et arry indtil du er klar til at skrive til en ny fil.
Synes godt om
Slettet bruger
28. juli 2003 - 14:03#5
Som jeg læser det så er det xxxxx og yyyyy han gerne vil have ud i de linier hvor der står Activeno og Type, hvis det er tilfældet så skal der noget stregsammenligning til. Eks. If Instr(linien, "ActiveNo") > 0 then msgbox "her har vi en linie med activeno" End If
Jo, det er hvad der står efter ActiveNO og Type jeg har interesseret. Men selve navnene AcitiveNO og Type må gerne komme med. Måske er jeg bare for "grøn" til VB, at jeg behøver et konkret source-eksempel. Kan det lade sig gøre ?
Dim TextLine,a,t a="":b="" Open "TESTFILE" For Input As #1 ' Open file. Do While Not EOF(1) ' Loop until end of file. Line Input #1, TextLine ' Read line into variable. if left(textline,1)= "A" then a = right(textline,5) end if if left(textline,1)= "T" then b = right(textline,5) end if Loop Close #1 ' Close file.
Ved ikke lige hvad du skal bruge det til, men jeg synes det er nemmere blot at tage en linie ad gangen :o)
Nope, filen ikke kommasep. desværre. Jeg skal så bruge de 2 omtalte linier til en ny fil. Som jeg skal bruge til at indsætte i et regneark/evt.accessbase. vh thjoe
Uddrag af txt-fil:
House - telnet4 ActiveNO Romeo Model Cabs Modeltype 16A Type 016.00 Start1971 End2003
Synes du sagde 'altid 5 tegn' ? I ovennævnte har Type da 6 tegn.
Anyway...
Dim TextLine,a,b a="":b="" Open "frafil.txt" For Input As #1 Open "tilfil" For Output As #2 Do While Not EOF(1) ' Loop until end of file. Line Input #1, TextLine If Instr(linien, "ActiveNo") > 0 then a = right(textline,5) write #2,a end if If Instr(linien, "Type") > 0 then b = right(textline,6) ' hvis der er 6 tegn write #2,b end if Loop Close
Dim TextLine,a,b a="":b="" Open "frafil.txt" For Input As #1 Open "tilfil" For Output As #2 Do While Not EOF(1) ' Loop until end of file. Line Input #1, TextLine If Instr(Textline, "ActiveNo") > 0 then a = right(textline,5) write #2,a end if If Instr(Textline, "Type") > 0 then b = right(textline,6) ' hvis der er 6 tegn write #2,b end if Loop Close
Mikker Kanon... præcis det... :-) Smid endelig et svar...... Kan man "automatisere" det... Jeg har nemlig omkring 200 filer det drejer sig om de hedder 0001.txt, 0002.txt og fremdeles. Så de nye filnavne f.eks. bliver ny0001.txt og fremdeles. vh thjoe.. Og tak......
Den er ikke testet, men det burde virke :o) Håber du får glæde af det.
Dim TextLine,a,b,i,frafil,tilfil for i = 1 to 200 ' hvis der er 200 filer a="":b="" frafil = trim(Format(i, "0000") & ".txt") tilfil = trim("ny" & frafil) Open fra For Input As #1 Open tilfil For Output As #2 Do While Not EOF(1) ' Loop until end of file. Line Input #1, TextLine If Instr(Textline, "ActiveNo") > 0 then a = right(textline,5) write #2,a end if If Instr(Textline, "Type") > 0 then b = right(textline,6) ' hvis der er 6 tegn write #2,b end if Loop Close next i
Mikker. Danke.. Lyder kanon din "nye" løsning, men virker desværre ikke. Fejl: Run-timeError75 - fileNotFound i linien Open frafil For Input As #1 Har smidt min kode i samme mappe som mine txtfiler. Er det noget med AppPath ? Tror det en bakatel... Kan du se hvad der er galt. Men anyway 1000 thx. for hjælpen.
Mikker Har fundet "løsningen", så nu virker alles zusammen... danke
Synes godt om
Ny brugerNybegynder
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.