[vb] Tekst inlezen naar variabele

Pagina: 1
Acties:

  • EvdB
  • Registratie: November 2001
  • Laatst online: 31-08 20:18
Ik wil in een tekst bestand zoeken op een bepaald keyword en dat inlezen in een variabele/string. Dit moet dan worden gekopieerd naar een bepaalde cel in Excel.
Weet iemand hoe ik dit moet oplossen?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:22

mulder

ik spuug op het trottoir

Ja. (1)Dan moet je het tekst bestand openen met VB en (2)inlezen, (3)in die tekst gaan zoeken, (4)VB dan Excel laten opstarten en (5)dan die tekst in in cell stoppen.

Begin maar bij 1, wat heb al.

oogjes open, snaveltjes dicht


Verwijderd

[neem-vaag-mode-over-mode]
1 Start VB
2 Type de code
3 Make je project
4 Voer het uit
[/neem-vaag-mode-over-mode]

Sjemig, heb je een vraag over iets dat je niet begrijpt, of wil je dat iemand de code voor je gaat schrijven zodat je die kunt gebruiken???

  • EvdB
  • Registratie: November 2001
  • Laatst online: 31-08 20:18
Sorry dat ik wat vaag was.
Dit is het wat ik heb. Deze module wordt aangeroepen in Excel. Er is een text file gegenereerd en deze wil ik nu weer importeren, dus zoeken op een keyword en de waarde die erbij hoort in een cel van Excel zetten.


Sub ImportHYCO()
fileToOpen = Application.GetOpenFilename("HYCO keyword files (*.hyc), *.hyc")
If fileToOpen <> False Then
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(fileToOpen)
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
s = ts.readall
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
c = ts.ReadLine
ts.Close
End If


If c <> "** This file has been created with HYCO Keyword Generation system" Then
MsgBox "This is NOT a HYCO keyword file", vbCritical
Else
MsgBox "This is a HYCO keyword file", vbInformation
End If
End Sub

Ik weet nu niet hoe ik de tekst moet zoeken en die in een variabele moet zetten.

Verwijderd

s bevat de inhoud van het file. Dan ga ik ervan uit dat je iets hebt in de trend van [KEYWORD]="Waarde" of zo

dan kan je dat zo doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
dim lPos as long
dim cKey as string

lPos = instr(s,"[KEYWORD]")
if lPos > 0 then
   ' Je hebt nu de positie van [KEYWORD]=" dus 11 tekens
   ' verder begint jouw waarde. Voor het gemaak lees ik
   ' even 20 tekens na de starpositie
   cKey = mid(s,lPos+11,20)
   msgbox "Waarde is " & cKey

else
   msgbox "Sleutelwaarde niet gevonden"
end if

  • EvdB
  • Registratie: November 2001
  • Laatst online: 31-08 20:18
Bedankt voor het snelle antwoord,
Het is gelukt! :)

Maar is dit de beste manier om zo meerdere waarden die achter een bepaald keyword staan in te lezen?
De waarden zijn niet altijd van een bepaalde lengte. Dus als ik het aantal karakters nu inlees, leest hij ook de karakters op de volgende regel in, wanneer de waarde kleiner is (waarde heeft een variabele lengte).
Is het mogelijk om alleen het getal/woord wat achter de dubbele punt staat in te lezen tot de volgende spatie?

Verwijderd

Wat je wellicht beter kunt doen is:
code:
1
2
3
4
5
6
7
8
9
10
while not ts.eof
   c = ts.ReadLine
   if instr(c,"[SLEUTEL1]") then
    cKey1 = right(c, len(c)-len("[SLEUTEL1]="))
   elseif instr(c,"[SLEUTEL2]") then
    cKey2 = right(c, len(c)-len("[SLEUTEL2]="))
   elseif instr(c,"[SLEUTEL3]") then
    cKey3 = right(c, len(c)-len("[SLEUTEL3]="))
   end if
wend

SLEUTEL1 enz. zijn natuurlijk fictieve voorbeelden, maar de methode is dat je de regels leest en dan beoordeeld op de sleutelwoorden.

  • EvdB
  • Registratie: November 2001
  • Laatst online: 31-08 20:18
PRODUCT M=S8
OPERATION ISOTHERMAL, TEMPERATURE=535, PRESSURE=18.9
RXCALCULATION MODEL=METHANATION
REACTION METHANATION
APPROACH DT=-10

Dit is een gedeelte uit het tekstbestand. Hiervan moeten de dikgedrukte woorden en cijfers worden weggeschreven naar variabelen en naar verschillende cellen in Excel.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 22:22

mulder

ik spuug op het trottoir

Lekkere structuur, daar heb je zeker geen controle over?
Denk dat je dan toch echt moet gaan parsen, dus regel voor regel uitlezen en de keyfield en keyvalues eruit moet plukken

oogjes open, snaveltjes dicht


Verwijderd

De sleutels die je dus zoekt zijn:

PRODUCT M=
OPERATION
TEMPERATURE=
PRESSURE=
RXCALCULATION MODEL=
REACTION
APPROACH DT=

Zet die in een array, bijv cKeys(7) en lees dan het file in. Test m.b.v. instr() op de aanwezigheid. Het einde van je waarde bepaal je door het begin van de volgende sleutel.

Sterkte, ik ga nu met vakantie!

  • EvdB
  • Registratie: November 2001
  • Laatst online: 31-08 20:18
Sepans en Don Facundo, bedankt voor jullie reactie. Ik ben er in ieder geval weer een stuk wijzer van geworden.
Het probleem is eigenlijk nog complexer;

FLASH UID=A01, NAME=PROCESS GAS BOILER
FEED S19
PRODUCT V=211
ISO TEMPERATURE=350, DP=0.22
EQUREACTOR UID=A02, NAME=HTSHIFT REACTOR
FEED 211
PRODUCT M=212
OPERATION [b]ADIABATIC[b], DP=0.21
RXCALCULATION MODEL=SHIFT
REACTION SHIFT
APPROACH DT=12
HX UID=[b]TO_DEWPOINT[b]
HOT FEED=212, M=S33, DP=0.3
OPER HDTADEW=0.1

Elk blok (FLASH, EQUREACTOR, HX en nog vele andere) hebben bepaalde input variable die ik eruit wil destilleren. De structuur van elk blok ligt niet vast, daar ligt waarschijnlijk het grootste probleem.
Pagina: 1