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

Kan je zoeken in een .txt bestand?

Status
Niet open voor verdere reacties.

Ginger

Terugkerende gebruiker
Lid geworden
29 dec 2006
Berichten
2.972
Hoi helpers. Ik heb een scannerregistratie systeempje gebouwd in Excel. Dit werkt prima vanaf 1 locatie in ons DC omdat de uitgifte database als sheet in dat document zit. Maar helaas blijkt dat we vanaf 2 punten de uitgifte én inname moeten gaan doen. Omdat ik die uitgifte en inname met nogal wat VBA code doe, kan ik 'm dus niet online in OneDrive plaatsen en 'm zo op 2 plekken lokaal laten openen en gebruiken (reeds getest). Nou had ik dus het idee om die database sheet als een .txt weg te schrijven (wat uiteraard geen probleem is), maar dan het volgende waar ik verder niets over kan vinden via Google...

Is het mogelijk om iets van een search of find of weet ik 't wat, te doen in een .txt bestand? Dit dus zónder eerst die .txt te laden in Excel, daar je ding te doen en dan weer terugschrijven. Mijn angst hiermee is namelijk dat die uitgifte en inname handeling op die 2 plekken tegelijk gebeuren (zou kunnen toch?) en dat dan 1 van de 2 wordt overschreven en m'n data niet meer klopt. Ik hoopte dus dat er iets via VBA zou kunnen dat je het .txt bestand opent (en dus ook locked!), het bewuste scannernummer opzoekt, de status aanpast en dan opslaat en sluit.

Dit is dus puur ff een kennisvraag. Vandaar dat ik ook geen bijlages heb toegevoegd, alleen de vraag of iemand weet over het bovenstaande mogellijk is.

Dank voor eventuele reacties op mijn vraag.
 
Laatst bewerkt:
hallo leo,
het lijkt me alsof je die txt (csv) opent en eventueel splitst op zijn separator, je tekst zoekt (in de ene of andere kolom) en dan in diezelfde rij een aanpassing doet en daarna het zaakje terug opslaat als txt of (csv). Niet indrukwekkend moeilijk, alleen die status "locked", daar kan ik eventjes niets over kwijt.
Heb je een voorbeeldje van zo'n locked file, met daarin iets dat je wil aanpassen van status 1 naar status 2
 
Of zoiets:
Code:
Sub fnd()
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objTF = objFSO.OpenTextFile("TekstBestand.txt", 1)
    strIn = objTF.readall

    If InStr(1, strIn, "Te Zoeken String") > 0 Then
        MsgBox "Gevonden"
    End If
    objTF.Close
End Sub

Plaats een voorbeeld van zo'n tekst bestand.
 
Laatst bewerkt:
@Cow18, dank voor je reactie. Ik had zelf ook al die denkrichting gehad, maar vind het dus spannend dat toch op 2 plekken tegelijk een procesbegeleider met een uitgifte of inname bezig kan zijn. Daarom zat ik dus aan iets van een "lock" te denken.

@Edmoor, ook jij dank voor het reageren. Die "createobject" versie kende ik niet (uiteraard wel 'ns bij jullie guru's voorbij zien komen, maar nooit actief in het geheugen opgeslagen ;)). Ik heb morgen een herhalingscursus voor BHV en ben dus woensdag pas weer op kantoor. Ik zal dan je oplossing eens bekijken en tevens een .txt bestandje aanmaken. Deze had ik overigens nog niet aangemaakt, omdat ik nog in de nadenk fase zat. Ha ha ha. Ik laat van me horen.

Tot zover beide alvast nogmaals dank.
 
voortbreiend op de voorzet van Edmoor zou je anders ook een split kunnen doen.
Vraag is enkel of je die zoekstring wil wijzigen of die enkel gebruikt om de tekst er net voor/na te wijzigen, maar dat is slechts een kleine aanpassing ...
Code:
Sub fnd()
     'Set objFSO = CreateObject("Scripting.FileSystemObject")
     'Set objTF = objFSO.OpenTextFile("TekstBestand.txt", 1)
     'strin = objTF.readall

     strin = "aaaaaaate zoeken stringbbbbbbte zoeken stringcccccte zoeken string"     'voorbeeldje"

     s = "Te Zoeken String"
     sp = Split(strin, s, 2, 1)     'hoofdletterongevoelig en in 2 stukken knippen (je wil aan de volgende "te zoeken string"'s niet raken)
     If UBound(sp) > 0 Then     ' zoekstring zit er in
          s = "veranderde string"
          strout = Join(sp, s)
          MsgBox strin & vbLf & vbLf & strout
     Else
          MsgBox "prrobleem"
     End If

     'End If
     'objTF.Close
End Sub

Maar eigenlijk zou ik een batch-file aanmaken, waarbij ik dan de scans aan de uitgang (in de veronderstelling dat die het minst druk/belastend is, dus in de slave-rol gedrukt wordt en de ingang dus master is) zou verzamelen en ergens een vlaggetje (ook een klein txt-bestandje met een soort handshake) waarmee de ingang aangeeft met welke batchfile de master bezig is. Wil de master met de "huidige" batchfile beginnen, dan doet de slave maar de volgende open. En de master die bekijkt die batchfiles als hij tijd heeft of iedere minuut of ....

Of het zou kunnen zijn dat de ingang minder belastend is omdat die grote blokken uniforme data ingeeft en de uitgang kleine diverse orders moet afhandelen, ik weet het niet ... .
Is OneDrive niet een beetje traag en is die altijd bereikbaar ?
 
Laatst bewerkt:
Ik dacht eerder aan het gebruik van VBA, dat automatisch een signaal geeft als een bestand in gebruik is.
Zaak is natuurlijk het bestand zo kort mogelijk te openen.
Zelf gebruik ik daarvoor 2 routines:
1 om de gegevens uit het bestand op te halen en dat zo snel mogelijk weer te sluiten.
1 om de gegevens naar het bestand weg te schrijven en dat zo snel mogelijk te sluiten.
Beide procedures nemen slechts milliseconden in beslag.

Code:
Sub M_snb()
 c00= "G:\OF\scans.txt"

 open c00 for Input as #1
   c01 =Input(LOF(1),#1)
 close

 c01=replace(c01,"snb","")

 Open c00 for Output as #1
   print #1, c01
 close
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan