• 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.

TXT naar excel spliten met een opgegeven waarde

  • Onderwerp starter Onderwerp starter HWV
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

HWV

Terugkerende gebruiker
Lid geworden
19 feb 2009
Berichten
1.213
Beste,

Ik hoop dat u mij kunt helpen met het volgende:

Van SNB heb ik de volgende code gekregen om een TXT bestand van 650.000 regels te spiltsen.

http://www.helpmij.nl/forum/showthread.php?t=406486

Code:
Sub bestand()
  Open "C:\voorbeeld.txt" For Input As #1
    sq = Split(Input(LOF(1), #1), Chr(10))
  Close #1

  For j = 65000 To UBound(sq) Step 65000
    sq(j) = "###" & sq(j)
  Next
  sq = Split(Join(sq, vbCr), "###")

  For j = 0 To UBound(sq)
    Open "C:\deel " & j & ".txt" For Output As #1
      Write #1, sq(j)
    Close #1
  Next
End Sub

Het werkt perfect maar ik moet hier nog een paar handmatige handelingen op los laten waar een hoop tijd mee verloren gaat dus ik wil het volgende vragen:

Is het mogelijk om een opgegeven waarde op te geven waar hij moet splitsen
Als na regel 6450 in kolom A het wordt " Approachcode" staat dan hierna spliten .

Waarom;

Het bestand wat ik binnen trek is zoals gegegd 650.000 regels lang, met een hoop troep er in zoals "vervolg blad" 1 t/m .. en een hoop lege velden. Die kan ik er nu allemaal uitfilteren maar ik heb een terugkerend patroon van ongeveer 23 regels na schoonmaken van het bestand. Omdat het script splits op de 65.000 regels wil het voorkomen dat hij halverwege de 23 regels split die moet ik dan handmatig in de juiste excel sheets zetten op de juiste plek.
Het zou dus makkelijker zijn als dit gelijk gebeurd met het splitsen van het TXT bestand

ik hoop dat hier een oplossing voor te vinden is

Groet HWV
 
Laatst bewerkt:
Is de vraag niet duidlijk

Beste ,

Als de vraagstelling niet duidelijk is , wilt u dit mij dan laten weten zaodat ik misschien een verdere uitleg kan geven over mijn probleem.

Ik hoop dat er iemand is die ( deze uitdaging ) zou willen aangaan.
Verschillende dingen al geprobeerd aan te passen in het script maar lukt helaas niet

Groet HWV
 
Lege rijen of kolommen verwijder ik zelf met ASAP utilities.
Informatie zal waarschijnlijk vanuit een ERP systeem komen, met welk systeem werk je.
Want er zijn ERP systemen die rechtstreeks naar Excel of Access kunnen exporteren.
Misschien ook een optie:

Crystal Reports - TXT bestand importeren - raport maken - exporteren naar Excel (wordt dan automatisch over meerdere tabbladen verdeelt).

Andere optie (heb dit nog niet geprobeerd met een txt file) draaitabel maken.
 
Oud systeem

Het is een systeem X-Logic ( 1980 ) maar er is weinig rechtstreeks uit te halen, vandaar dat we over gaan naar een ander systeem
Een printfile is nu te doen enkel die is meer dan 65.000 regels.
Met het script van SNB kan ik het mooi splitsen, maar hij hakt het soms verkeerd af.
vandaar de vraag of het mogelijk was om een waarde op te geven dat hij bv na rij 6450 zoekt op een woord en dan daarna pas gaat splitsen.
Zo hou ik mijn bestand heel en kan ik de volgende macro er gelijk overheen laten lopen om er een overzicht van te maken in rijen en kolomen

Ik hoop dat je kan helpen.

HWV

PS.
weet je of ASAP utilities er ook in het nederlands al is.
 
Probeer eens de eerste 65000 in de lijn
Code:
For j = 65000 To UBound(sq) Step 65000
te veranderen in het gewenste.
 
Veranderen, helaas niet altijd het zelfde

Wigi bedankt voor je reactie.
Helaas is het niet zo makkelijk had ik ook al gedacht.

Misschien toch !

Kan ik ook meerdere waarde opgeven bv.
Dat hij de eerste keer afbreek op bv 64.750 tweede op 129.500 en de derde op 194.350 enz. ( dit dus tien keer )

Dat zou ook al een oplossing zijn voor mijn probleem. Dan ik deze waarde`s er vast inzetten.

Ik hoor het graan van U

HWV
 
En is het verschil in stapgrootte dan 64750 en niet 65000? (al is het laatste verschil wel 64850)
 
Stap groote

Wigi bedankt voor je reactie.

Het bestand is opgebouwd als volgt

regel 1 aaaaa
regel 2 bbbbb
regel 3 ccccc
regel 4 ddddd
regel 5 eeeee
----------------------

Vervolg op blad
( soms 1 of soms twee lege regels of andere tekens )
----------------------
regel 1 aaaaa
regel 2 bbbbb
regel 3 ccccc
regel 4 ddddd
regel 5 eeeee
----------------------

Vervolg op blad
( soms 1 of soms twee lege regels )
----------------------

er zit een terug kerend patroon in van aaaa t/m eeee van de ene keer 22 regels en soms meer of minder.

De tussenliggende regels is niet altijd gelijk ivm dat hij ook soms kop namen meeneemt en soms niet.
Als ik dus één keer het bestand binnen haal zie ik waar hij moet worden gesplit en kan ik dit vast zetten in het script.

Waarom !!

Dit ivm dat ik vele bestanden moet voorbereiden, dus nu voorbereiden en straks bij wijze met één druk op de knop de gegevens update.

ik hoop dat je kan helpen.

HWV
 
Laatst bewerkt:
Kan je geen voorbeeldbestandje van een bronfile aanmaken? Niet je bestand met 650 000 regels, maar eentje met minder regels maar waar het toch duidelijk wordt wat wel Excel moet komen en wat niet (Uiteraard ontdaan van gevoelige info).

Op die manier gaat de hulp makkelijker op gang komen veronderstel ik.
 
Een voorbeeld

Beste finch,

ik heb voorbeelden geplaatst om een idee te krijgen hoe ik de bestanden heb nu.
Ik heb het script zo goed als klaar zodat hij er netjes een overzichtelijke lijst van maakt.
Het is onder tussen wel een lang script maar het werkt.
Hij zet nu de regels van kolom C en kolom F netjes in een apparte blad in kolommen en zo gaat hij het gehele bestand langs, zodat ik een mooi overzichtelijke lijst krijg van mijn bestand.

Het handmatige stukje zoals hierboven beschreven zou ik graag ook via een code willen laten lopen.

Als hij maar precies stopt met importeren tussen de (kleine bestandjes) dan loopt alles vlekkeloos.
Dus als ik een waarde kan opgeven dat hij stopt bij een opgegeven waarde nar regel.... dan moet het lukken maar ik zou niet weten hoe.


Ik hoor graag van je

HWV
 

Bijlagen

Laatst bewerkt:
Heeft er iemand een idee

Beste,

Heeft iemand een idee hoe ik dit moet aanpakken. :(
Misschien dat ik het op een andere manier moet oplossen.

Ideeen zijn welkom. :thumb:

HWV
 
geprobeerd een code saen te stellen

Zoals bekend ben ik bezig om VBA te begrijpen.
We gaan de juiste kant op maar soms wil je te veel in één keer.

Ik ben bezig ,en met behulp van de mensen hier, heb ik al een script om een TXT file binnen te halen en te splitsen als deze te groot wordt voor excel 2003.

Ik heb geprobeerd de code aan te passen zodat hij eerst zoekt naar een waarde tussen 64900 en de 65000 dit is de waarde "stop hier" in kolom A en dat hij hier boven gaat splitsen en dan weer verder gaat met splitsen enz .
Dit wordt komt vele malen terug in de TXT file dus ik moet een reeks op geven waar hij in gaat zoeken zo dicht mogelijk mij de 650000.


Code:
Sub bestand()
  Open "D:\VBA scripts\voorbeeld.txt" For Input As #1
    sq = Split(Input(LOF(1), #1), Chr(10))
  Close #1
For i = 64900 To Range("A65000").End(xlUp).Row
If Cells(i, 1) = "stop hier" Then GoTo J
  For J = i To UBound(sq) Step 65000
    sq(J) = "###" & sq(J)
  Next
  sq = Split(Join(sq, vbCr), "###")

  For J = 0 To UBound(sq)
    Open "d:\deel " & J & ".txt" For Output As #1
      Write #1, sq(J)
    Close #1
  Next
End
Next i
End Sub

Helaas de code werkt niet en ik weet echt niet wat ik fout doe.
misschien iemand die zijn hulp wil aanbieden.

groet

HWV
 
Onder de aandacht

Beste allemaal,

Graag wil ik mij vraag opnieuw onder de aandacht brengen, om te kijken of er iemand hier een oplossing voor heeft.

Groet HWV
 
Ik denk dat het veel simpeler kan. Je hebt 650.000 regels. Per record worden 22 regels gebruikt en er zit nog wat lege "rommel" tussen. Dus per saldo heb je zo'n 2.300 records.

Dit stukje code:
Code:
Sub inlezentxt()
Dim regel As String
Open "h:\my documents\data\helpmij\inlezen txt bestand\voorbeeldtxt.txt" For Input As #1
While Not EOF(1)
Line Input #1, regel
    If Not Left$(regel, 1) = "" Then                            ' Als de regel niet leeg is
        If Not Left$(regel, 1) = "-" Then                       ' Als er geen streepje staat
            If Not Left$(regel, 1) = Chr$(9) Then               ' Als er geen tab staat
                If Not Left$(regel, 1) = Chr$(12) Then          ' Als er geen Linefeed staat
                    If Not Left$(regel, 7) = "Vervolg" Then     ' Als er geen vervolg staat
                        ActiveCell.Value = regel
                        ActiveCell.Offset(1, 0).Range("A1").Select
                    End If
                End If
            End If
        End If
    End If
Wend
Close #1
End Sub

haalt alle rommel weg en plaatst e.e.a. in Excel. Dan kom je nog steeds boven de 65536 regels, dus werkt het niet.

Bovenstaande code is uit te breiden met het uitlezen van de waarden, zoals die voor "Verkoopartikel" en dan kun je in één keer je hele record vullen. Belangrijk is wel dat exact bekend is hoe lang de waardes zijn. Is bijv "Artikelgroep" altijd 6 posities?

Kun je een paar "echte" records plaatsen, met bv evenveel cijfers als in het echte bestand?
 
Nieuwe voorbeeld

Beste,

Bedankt voor uw reactie, nu gaan we weer een stap verder.
Ik wist niet dat je al een verdeling kon maken bij het binnen halen van een txt bestand !
In de bijlage een nieuw bestand waar de waarde`s zijn omgezet in andere getallen en omschrijvingen als dat deze werkelijk zijn.

De artikelgroep heeft altijd 3 karakters.

Alvast bedankt voor de genomen moeite en de tijd die u erin stopt om mijn probleem te helpen op te lossen

Groet HWV
 

Bijlagen

Code:
Hij zet nu de regels van kolom C en kolom F netjes in een apparte blad in kolommen en zo gaat hij het gehele bestand langs, zodat ik een mooi overzichtelijke lijst krijg van mijn bestand.

Mag ik dat stukje code van jou? Dan zal ik het proberen in te passen. Want ik ga er vanuit dat van de 10 bestanden die je uiteindelijk krijgt, weer 1 lijst gemaakt moet worden?

Groet,
Gert
 
code tot nu toe

Ik heb de code toegevoegd zonder gevoelige informatie.
Al met al ( al zeg ik het zelf een lange code, en misschien heel onoverzichtelijk ) maar het werkt.
Ik hoop dat je hier iets mee kan.

Groet HWV
 

Bijlagen

Dank, ik zal er even mee gaan puzzelen. Veel van de code kan ik wel volgen, maar ik weet natuurlijk niet wat je er allemaal nog meer mee doet.

In Essentie onderken ik de volgende stappen:
- je hebt een unpit TXT-file met records
- naast de records die ieder 22 regels - waarvan 1 blanco- bevatten staat er ook rommel in het bestand
- van die 22 regels moet een overzicht in kolommen gemaakt worden zodat er een overzichtelijke lijst ontstaat.

Mijn idee is om
- de "rommel" uit te filteren zoals ik hierboven heb aangegeven
- daarna 2900 x 22 (= 63800) regels inlezen en deze een hulpwerkblad plaatsen
- het hulpwerkblad selecteren
- met de functie Data --> Tekst naar kolommen --> separator = Tab de cellen splitsen
- kolommen C en F kopieren en Plakken Speciaal naar het uiteindelijke werkblad
- hulpwerkblad leeg maken
- volgende 2900 x 22 regels inlezen

Ik zal deze week even kijken of ik hier iets mee kan.
 
Ben benieuwd

Beste,

Bedankt voor de hulp ik kijk er naar uit hoe het één en ander in een code gezet kan worden. Ik kan deze dan doorvoeren op de rest van mijn bestanden.

Groet HWV
 
HWV,

In bijgaand zip-bestand staat de excel-sheet met de macro die het moet doen. Loopt het hele inputbestand door en maakt rechtstreeks de tabel aan. Ik heb de records in jouw laatste voorbeeldfile gedupliceerd totdat het bestand circa 60 mb was. Verwerking op een relatief trage, oude PC (ja, ze bestaan nog ...) leverde een verwerkingssnelheid op van circa 3.000 records per 5 minuten. Maar dat was wel met het "mee laten lopen" van een controleteller.

Gegegevens PC: HP met Celeron 2,4 ghz processor ern intern geheugen van 512 (waar vind je ze nog ..)

Hopelijk heb je er iets aan.

Nogmaals, deze macro loopt dus rechtstreeks je inputfile door en zet de records meteen in de tabel. Uit jouw gegevens maak ik op dat jij zo'n 22.000 - 23.000 records moet hebben, dus dat moet wel gaan lukken.

Groet,
Gert
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan