Hej, Förstår inte riktigt vad du menar, men koden nedanför läser in 5 rader från fil1 och 5 rader från fil2 tills filerna nått slutet Och om du kan ha ett antal olika filer och inte vet hur många om du vill läsa alla filer i en folder kan du loopa igenom dem så hä: Hej, Hmm... hur ser det ut om det inte är 5 rader? Då får du läsa in varje rad i en sträng först, det finns väl någonting i strängen som talar om att en ny post börjar, eller en post slutar? Är det så här du tänkt dig det ? Tack så mycket för er respons! jag har kommit lite längre, dock inte helt löst det. Det är ibland svårt och beskriva vad man egentligen vill att koden skall göra.2 filer till 1
Mitt case är:
Jag läser från 2 olika filer med samma struktur och skall skriva till en 3:e
Så här ser filerna ut:
1 Namn
2 co
3 Adress
4 Posnr
5 Telnr
1 Namn
2 co
3 Adress
4 Posnr
5 Telnr
Posterna innehåller/startar alltid rad1. Det är inte alltid 2-5 förekommer.
Nu vill jag läsa en post från Fil1 skriva till utfil, sedan läsa en post från fil2 skriva till samma utfil tills filerna är slut.
Nu är jag redan tunnhårig...så jag kan inte slita så mycket mer. Finns det någon som har något tips?
/haniSv: 2 filer till 1
<code>
Dim fso As New Scripting.FileSystemObject
Dim oUtStream As Scripting.TextStream
Dim oReadStream1 As Scripting.TextStream
Dim oReadStream2 As Scripting.TextStream
Dim i As Integer
Dim bEof1 As Boolean
Dim bEof2 As Boolean
Set oUtStream = fso.OpenTextFile("C:/Utfil.txt", ForWriting, True)
Set oReadStream1 = fso.OpenTextFile("C:/Infil1.txt", ForReading)
Set oReadStream2 = fso.OpenTextFile("C:/Infil2.txt", ForReading)
Do Until oReadStream1.AtEndOfStream And oReadStream2.AtEndOfStream
If Not oReadStream1.AtEndOfStream Then
For i = 1 To 5
oUtStream.WriteLine oReadStream1.ReadLine
If oReadStream1.AtEndOfStream Then Exit For
Next
End If
If Not oReadStream2.AtEndOfStream Then
For i = 1 To 5
oUtStream.WriteLine oReadStream2.ReadLine
If oReadStream2.AtEndOfStream Then Exit For
Next
End If
Loop
oReadStream1.Close
oReadStream2.Close
oUtStream.Close
Set fso = Nothing
</code>Sv: 2 filer till 1
kan du skapa referens till katalogen och sedan loopa igenom alla
objekt i den och läsa de som uppfyller dina krav (tex namngivna på ett
visst sätt).
/EmmaSv: 2 filer till 1
Dim fso As New Scripting.FileSystemObject
Dim tmpFile As Scripting.file
Dim tmpfld As Scripting.Folder
Set tmpfld = fso.GetFolder(app.Path & "\bin")
For Each tmpFile In tmpfld.Files
...
...
...
...
next tmpFile
set fso=nothing
inne i loopen kan du nog använda koden ovan...
hoppas det hjälpte lite iallafall
JohanSv: 2 filer till 1
Det är ungefär så här jag har gjort men problemet är att det inte alltid är 5 rader per post.
Helgen blir lång...
/haniSv: 2 filer till 1
är fältet tomt efter co: eller är raden helt blank?
Finns de "nyckelord" som du skrev i ditt exempel i filen?
Då kan du alltid kolla om raden innehåller ett av de giltiga nyckelorden
och om det gör det kan du tom göra olika saker beroende på vad som
står.
Du kan till exempel använda instr(helaRaden, nyckelord) <> 0
(dvs nyckelordet finns på raden)
/EmmaSv: 2 filer till 1
Sv: 2 filer till 1
<code>
Dim fso As New Scripting.FileSystemObject
Dim oUtStream As Scripting.TextStream
Dim oReadStream(2) As Scripting.TextStream
Dim i As Integer
Dim j As Integer
Dim strPost(2) As String
Dim strNyPost As String
Dim bRead(2) As Boolean
Dim bFirst As Boolean
bRead(0) = True
bRead(1) = True
Set oUtStream = fso.OpenTextFile("C:/Utfil.txt", ForWriting, True)
Set oReadStream(0) = fso.OpenTextFile("C:/Infil1.txt", ForReading)
Set oReadStream(1) = fso.OpenTextFile("C:/Infil2.txt", ForReading)
'Indikator som anger ny Post
strNyPost = "1"
Do Until oReadStream(0).AtEndOfStream And oReadStream(1).AtEndOfStream
For j = 0 To 1
bFirst = True
If Not oReadStream(j).AtEndOfStream Then
Do Until oReadStream(j).AtEndOfStream
If bRead(j) = True Then
strPost(j) = oReadStream(j).ReadLine
Else
bRead(j) = True
End If
'Jämför första tecknet med indikatorn
If Left$(strPost(j), 1) = strNyPost And bFirst = False Then
'Hittar ny post, hoppar ut ur loopen
bRead(j) = False
Exit Do
End If
bFirst = False
oUtStream.WriteLine strPost(j)
If oReadStream(j).AtEndOfStream Then Exit For
Loop
End If
Next
Loop
oReadStream(0).Close
oReadStream(1).Close
oUtStream.Close
Set fso = Nothing
</code>
/JensaKSv: 2 filer till 1
Jag lade upp en skiss på min utmaning(problem) för den intresserade:
http://hem.fyristorg.com/hanii/LasaFiler.htm
/hani