Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Geavanceerd zoeken in tekstbestanden

Pagina: 1
Acties:

  • Fairy
  • Registratie: Januari 2001
  • Niet online
Ik heb een lastig probleem waar ik niet uitkom. Ik hoop dat jullie mij op de juiste weg kunnen helpen :)

Ik moet in een stuk of 200 bestanden een waarde opzoeken, maar die is afhankelijk van 2 regels, dus niet 1 woord die achter elkaar staat. k heb maar even als voorbeeld wat onzin geplaatst om het idee kenbaar te maken, het gaan namelijk om vertrouwelijke gegevens.

Bijvoorbeeld:

code:
1
2
3
4
5
hjogiosfhsd &(%&^*& bla
regel6 gfsiogse  ^&*%&$&^^(
boeking1   waarde 7890543570
tekst5   waarde 8034-89052
higrhgkisdrhge


Nu moet ik in die tekstbestanden zoeken naar alle regels waarin "boeking1" staat, met een regel daaronder de regel tekst5 (met vannalles ertussenin), om vervolgens (handmatig) wat omliggende gegevens apart te zetten. Het moet gezocht worden in vrij grote bestanden, dus handmatig die losse woorden opzoeken heeft geen zin, aangezien die érg vaak voorkomen.

Zijn er programma's die dit kunnen? Excel is geen optie, aangezien het erg grote bestanden zijn, en het zijn er te veel om handmatig in te lezen in bijv access.

Wie heeft hier gedegen kennis van?

Bij voorbaat vriendelijk dank!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 10:34

remco_k

een cassettebandje was genoeg

Fairy schreef op woensdag 13 mei 2009 @ 10:09:
Zijn er programma's die dit kunnen? Excel is geen optie, aangezien het erg grote bestanden zijn, en het zijn er te veel om handmatig in te lezen in bijv access.
Toch zou ik al snel zeggen; maak er een database van. Access of niet, maakt niet uit.
Wat je zou kunnen doen is met een simpel dos commando alle bestanden bij elkaar in 1 bestand voegen:
code:
1
type c:\source\*.txt >> c:\output\blaat.txt

Dan hoef je nog maar 1 groot bestand in Access te importeren.
En hoe je dat goed moet doen, geen idee. Ik ben niet van de Accessen...

[ Voor 5% gewijzigd door remco_k op 13-05-2009 10:21 ]

Alles kan stuk.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Mwa, met een paar regels code ram je zo door 200 textfiles heen om te zoeken naar de gewenste waardes. Als je een beetje kunt programmeren (hell, zelfs VBA / VScript voldoet) ben je zo klaar.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Fairy
  • Registratie: Januari 2001
  • Niet online
Ik ben geen programmeur sorry. Ik ga nog even zoeken of hier programma's voor zijn.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Dim fso

set fso = CreateObject("Scripting.FileSystemObject")
scandir "c:\een\directory"     'De directory die doorzocht moet worden
set fso = Nothing

'Doorzoekt een directory
function scandir(path)
    Dim fld, file

    'Open de map
    set fld = fso.GetFolder(path)

    'Loop door alle files
    for each file in fld.files
        'Voldoet file aan de voorwaarden?
        if scanfile(file) then
            msgbox "Match: " & file.path
            'Doe hier iets met de file...
        end if
    next

    'Opruimen
    set fld = Nothing
end function

'Controleert of een gegeven file voldoet aan de gestelde voorwaarde(n)
function scanfile(file)
    Dim fhandle, line, boekingfound, filematch
    Const ForReading = 1

    'Open de textfile
    set fhandle = fso.OpenTextFile(file.path, ForReading, False)

    'Lees hele file, regel voor regel
    boekingfound = false    'Er is (nog) geen "boeking" regel gevonden
    filematch = false 'De file voldoet (nog) niet aan de voorwaarde

    while ((not fhandle.atendofstream) and (not filematch))
        'Lees regel
        line = fhandle.readline
        filematch = filematch or (boekingfound and (instr(1, line, "tekst5", vbTextCompare) = 1))
        boekingfound = instr(1, line, "boeking1", vbTextCompare) = 1
    wend

    'Netjes sluiten
    fhandle.close
    set fhandle = Nothing

    'Hebben we iets gevonden?
    scanfile = filematch
end function


:Y)

[ Voor 5% gewijzigd door RobIII op 13-05-2009 11:14 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Dit kan in ieder geval met dtSearch, door te zoeken met "w/20". Andere zoekmachines zullen ook wel een dergelijke 'near' functie hebben denk ik. Maar die zoeken vaak de bestanden op waar het voorkomt, niet de locatie binnen 1 bestand.

edit: RobIII: je zoekt nu op 1 regel, het gaat om de volgende regel. Maar dat is met een handleiding VBScript natuurlijk wel aan te passen.

[ Voor 23% gewijzigd door F_J_K op 13-05-2009 11:16 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
F_J_K schreef op woensdag 13 mei 2009 @ 11:13:
edit: RobIII: je zoekt nu op 1 regel, het gaat om de volgende regel. Maar dat is met een handleiding VBScript natuurlijk wel aan te passen.
Je kijkt niet goed ;)

VBScript:
1
2
        filematch = filematch or (boekingfound and (instr(1, line, "tekst5", vbTextCompare) = 1))
        boekingfound = instr(1, line, "boeking1", vbTextCompare) = 1 


Anders had ik wel een readall gedaan en dan gezocht met instr :P
(Kan overigens toch wel, maar dan moet je weer een split doen op linefeeds (welke altijd weer ellende zijn omdat ze \r\n of \n kunnen zijn) en dan door een array gaan zoeken...)

[ Voor 46% gewijzigd door RobIII op 13-05-2009 11:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1