• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Ene bestand gebruiken om ander in te lezen.

Status
Niet open voor verdere reacties.

Withaar

Verenigingslid
Lid geworden
8 apr 2001
Berichten
3.551
Ik heb twee bestanden, beide in TXT formaat.
Het ene bevat de bestands indeling van de ander, ik zou deze dus graag willen gebruiken om de ander netjes in excel te inporteren.
Opmaak van het indelings bestand ziet er als volgt uit;
PCFDF
PCFT 1
PCFO 1,1,2,1,2
PCFL UPDCEN 1 1
PCFL UPDDAT 1 6
PCFL UPDTIM 1 6
PCFL UPSYST 1 8
PCFL UPUPRF 1 10
PCFL UPUSCL 1 10
PCFL UPDSIN 1 7
PCFL UPPWCC 1 1
PCFL UPPWCD 1 6
PCFL UPPWCT 1 6
PCFL UPPWEI 2 6
PCFL UPPWEX 1 4
PCFL UPPWON 1 4
PCFL UPPSOC 1 1
PCFL UPPSOD 1 6
PCFL UPPSOT 1 6
PCFL UPNVSA 2 12
PCFL UPLDVS 1 7
PCFL UPSPAU 1 150
PCFL UPMXST 2 16
PCFL UPMXSU 2 16
PCFL UPPRLT 1 1
PCFL UPINPG 1 10
PCFL UPINPL 1 10
PCFL UPJBDS 1 10
PCFL UPJBDL 1 10
PCFL UPOWNR 1 10
PCFL UPGRPF 1 10
PCFL UPGRAU 1 10
PCFL UPGRPI 1 4
PCFL UPACCD 1 15
PCFL UPMGQU 1 10
PCFL UPMGQL 1 10
PCFL UPOTQU 1 10
PCFL UPOTQL 1 10
PCFL UPTEXT 1 50
PCFL UPSPEN 1 10
PCFL UPCRLB 1 10
PCFL UPINMN 1 10
PCFL UPINML 1 10
PCFL UPLTCP 1 10
PCFL UPDLVY 1 10
PCFL UPSVRT 2 4
PCFL UPPRDV 1 10
PCFL UPATPG 1 10
PCFL UPATPL 1 10
PCFL UPUSOP 1 240
PCFL UPUPLK 1 1
PCFL UPUPDM 1 1
PCFL UPSTAT 1 10
PCFL UPKBDB 1 10
PCFL UPASTL 1 10
PCFL UPLANG 1 10
PCFL UPCNTR 1 10
PCFL UPCCSI 2 6
PCFL UPSRT 1 10
PCFL UPSRTL 1 10
PCFL UPOBJA 1 10
PCFL UPAUDL 1 640
PCFL UPGATY 1 10
PCFL UPSUPG 1 150
PCFL UPUID 2 12
PCFL UPGID 2 12
PCFL UPSETJ 1 160
PCFL UPCHID 1 10
PCFL UPENPW 1 1
PCFL UPENPH 1 1
PCFL UPENLM 1 1

Relevante data begint op regel 4.
De eerste kolom is niet belangrijk, de tweede is de kolom naam, derde is een type aanduiding waar ik niets mee doe, vierde is de lengte van het te importeren veld.

Iemand met een goed idee?
 

Bijlagen

Laatst bewerkt:
En hier het in te lezen bestand (klein deel er van).

Ik heb op deze locatie helaas geen Zip mogelijkheid. voor gebruik gewoon even de .txt extentie er af halen.
 

Bijlagen

Ik hoop dat ik het goed begrepen heb.

In de ZIP zitten 2 Excelbestanden.
 

Bijlagen

Nee, komt in de richting maar de oplossing zal toch anders moeten zijn.

Ik maak downloads van query's.
in het eerste bestand kan ik zien wat de indeling van het tweede bestand is.

PCFDF
PCFT 1
PCFO 1,1,2,1,2
PCFL UPDCEN 1 1
PCFL UPDDAT 1 6
PCFL UPDTIM 1 6
PCFL UPSYST 1 8
PCFL UPUPRF 1 10
....

De voor mij relevante informatie begint op rij 4.
Eerste kolom heet in dit geval dus UPDCEN en heeft een lengte van 1 karakter.
Tweede kolom heet UPDDAT en heeft een lengte van 6 karakters.
3e is UPDTIM, ook met 6.
4e UPSYST met 8 en 5e UPUPRF met 10 karakters etc.

Nu kan ik deze gegevens handmatig gebruiken als ik het tweede importeer, excel vraagt hoe het bestand gescheiden is, ik kies dan voor vaste breedte en moet vervolgens de kolomeinden stuk voor stuk neer zetten.
Dus op positie 1 (+6) 7, (+6) 13, (+8) 21, (+10) 31 etc.
Het formaat van de te importeren bestand kan sterk wisselen, soms zijn het maar 3 of 4 rijen, dit met de hand te doen is niet zo veel werk, er zijn echter ook query's met wel 75 kolommen, met de hand is dan niet echt leuk meer...

Hoop dat me vraag zo wat duidelijker is.
 
Laatst bewerkt:
Ben zelf iets verder gekomen.
In de bijlage staan 3 bestanden.
- Lees.txt met een button die een marco start.
Je wordt gevraagd een bestand te kiezen.
Kies hier opmaak.txt
De macro opend dit bestand en past de data zo aan dat stap2 kan gaan beginnen.

Stap2 moet worden open het derde bestand, in dit geval Inlees.txt en gebruik de gegevens uit Opmaak.txt op Inlees.txt op een juiste manier te importeren.
 

Bijlagen

Voor het importeren gebruikt excel de volgende code

Workbooks.OpenText Filename:= _
"C:\Documents and Settings\xxx\Mijn documenten\Inlees.txt", _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array( _
Array(0, 1), Array(1, 1), Array(7, 1), Array(13, 1), Array(21, 1), Array(31, 1), Array(41, 1 _
), Array(48, 1) ....

.... Array(1888, 1)), _
TrailingMinusNumbers:=True

Via een soort for next lus zou dit Array dus gevult moeten worden met de gevonden getallen uit het Opmaak.txt bestand.

Iemand een idee?
 
Weer eens stapje verder;
Nog geen for - next lus voor het vullen, maar ik ga de goede kant op geloof ik.

....

' Laatste rij? (in Opmaak.txt)
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
'Range("C1") = LastRow

Dim Naam(1000) As String
Dim Aantal(1000) As Integer

'Lees waarden uit kolom A en B in

For t = 1 To LastRow
Naam(t) = Range("A" & t)
Aantal(t) = Range("B" & t)
Next t

Workbooks.OpenText Filename:= _
"Inlees.txt", _
Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:=Array( _
Array(0, 1), Array(Aantal(1), 1), Array(Aantal(2), 1), Array(Aantal(3), 1), Array(Aantal(4), 1), Array(Aantal(5), 1), Array(Aantal(6), 1 _
), Array(Aantal(7), 1), Array(Aantal(8), 1)), _
TrailingMinusNumbers:=True

De eerste 8 waarden worden nu inderdaad netjes ingelezen.
 
Nou met een for-next lus lijkt het niet te gaan, ik gebruik nu gewoon een macro met 50 array velden die ik wel automatische kan vullen, zie mijn oplossing vorige bericht.
Als er minder kolommen zijn wordt er gewoon de waarde 0 ingelezen in de array's ge gebeurd er verder niets mee.
Niet fraai maar het werkt wel.

Ik sluit de vraag.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan