Avatar billede stry Nybegynder
02. december 2006 - 20:09 Der er 11 kommentarer og
1 løsning

Brug af ekstern fil i dll-funktion

Er det muligt at tilknytte en ekstern fil til en dll-fil således at den "hænger ved" når dll'en distribueres eller bliver kompileret med i koden?
Jeg slår værdier op i en txt-fil som jeg så bruger i min funktion og derfor skulle de gerne hænge sammen.

Listen skal ikke være dynamisk så det gør ikke noget at den bliver hardkodet og kompileret.

Og hvis ikke: Hvad er så det bedste alternativ - det er omkring 1000 poster så en select case bliver i givet fald noget lang :-)

Nogen med en god idé?

På forhånd tak :-)
Avatar billede thesurfer Nybegynder
02. december 2006 - 20:43 #1
Det forstod jeg ikke..

Kunne du ikke bare lave en array, og putte alle posterne i den?

Giv et eksempel på hvordan det virker..
Avatar billede stry Nybegynder
02. december 2006 - 20:47 #2
Jeg har en funktion som jeg fodrer med et tal og så returnerer den en tekst afhængig af tallet - sagen er at få knyttet txt-filen til dll'en så det hele kommer med når dll'en distribueres.

Giver det mening :-)
Avatar billede thesurfer Nybegynder
02. december 2006 - 21:19 #3
Jeg går ud fra, at det f.eks. ser sådan ud:

TXT-fil
1:Hans Hansen
2:Katten og musen
3:Endnu en post

DLL:
HentTekst(2) -> udskriver "Katten og musen"

Er det noget i stil med hvad du har nu?

Du kan egentligt bare lave en array, og putte værdierne ind på placerne i arrayen..

Eksempel:
dim tekst
tekst = array("Hans Hansen","Katten og musen","Endnu en post")
msgbox tekst(1)

Nu udskriver den "Katten og musen", fordi arrays er 0-baseret (de starter ved 0 og ikke 1)..

Gav det mening..? :-)
Avatar billede stry Nybegynder
02. december 2006 - 21:26 #4
Jeg kender godt arrays, men tror ikke rigtigt det kan bruges da posterne ikke har fortløbende numre, men ellers har du ret omkring den ønskede funktionalitet.
Det nemmeste var jo helt klart hvis min txt-fil kunne integreres i sin nuværende form.
Avatar billede thesurfer Nybegynder
02. december 2006 - 22:48 #5
Det er ikke noget problem, med at de ikke er fortløbende numre..

Så laver du bare en funktion, der løber arrayen igennem..

eksempel:

' Felterne i din array ser sådan ud:
' 342342:Hans Hansen
' 544352:Katten og musen
' 657867:Endnu en post

' Ønsket id: 544352
min_ip = 544352 ' denne hentes via en funktion, f.eks.: msgbox HentTekst(544352)
for i = LBound(tekst) to UBound(tekst)
  tmp = tekst(i)
  if left(tmp, instr(tmp, ":")) = min_ip then
    HentTekst = mid(tmp, instr(tmp, ":")) ' returnerer "Katten og musen"
    exit for
  end if
next
Avatar billede thesurfer Nybegynder
02. december 2006 - 22:58 #6
Jeg laver et ordentligt eksempel lige om lidt..
Avatar billede stry Nybegynder
02. december 2006 - 23:01 #7
Okay, men hvordan skriver jeg så mit array ind i koden?
Avatar billede thesurfer Nybegynder
02. december 2006 - 23:03 #8
dim minarray
minarray = array("342342:Hans Hansen","544352:Katten og musen","657867:Endnu en post")

function HentTekst(min_id)

dim tmp, id, tekst, i
dim retur
retur = "Teksten blev ikke fundet"

for i = LBound(minarray) to UBound(minarray)
  tmp = split(minarray(i), ":")
  id = tmp(0)
  tekst = tmp(1)
  if "" & id = "" & min_id then
    retur = tekst
    exit for
  end if
next

HentTekst = retur
end function

msgbox HentTekst(544352)


Nu ved jeg ikke hvordan koden i din DLL ser ud, men du kan definere variabler øverst i filen.. lige som jeg har gjort med eksemplet her..
Avatar billede stry Nybegynder
03. december 2006 - 03:00 #9
Jeg kan ikke få indlæsningen af mit array til at virke - jeg har over 1000 poster og det går galt ved hvert linieskift. Jeg kan ikke holde linierne sammen med "_"  ....nogen gode idéer?
Avatar billede thesurfer Nybegynder
03. december 2006 - 09:11 #10
Giv et eksempel på dataene i txt-filen.. så kan jeg sikkert lave en konvertering..

F.eks, kan der være ",", ".", ";", osv i dataene?

Hvis der er et tegn der ikke kan forekomme i dataene, kan du bruge det som delimeter/separator.. Og derefter bruge Split funktionen (Visual Basic version højere end 5)..

Eksempel:

dim mintekst, minarray
mintekst = "342342:Hans Hansen;544352:Katten og musen;657867:Endnu en post"
minarray = split(mintekst, ";")


function HentTekst(min_id)

dim tmp, id, tekst, i
dim retur
retur = "Teksten blev ikke fundet"

for i = LBound(minarray) to UBound(minarray)
  tmp = split(minarray(i), ":")
  id = tmp(0)
  tekst = tmp(1)
  msgbox "min_id: " & min_id & ", id: " & id & ", tekst: " & tekst
  if "" & id = "" & min_id then
    retur = tekst
    exit for
  end if
next

HentTekst = retur
end function

msgbox HentTekst(544352) ' udskriver/returnerer "Katten og musen"


Jeg kan evt få programmet til at sætte det korrekt op, hvis du giver mig et eksempel på de data der ligger i txt filen..
Avatar billede stry Nybegynder
03. december 2006 - 13:39 #11
Så fik jeg det til at virke :-)
VB kan tilsyneladende ikke håndtere så store arrays i array-funktionen, så jeg splittede mit array i to og lavede en select case og indlæser så det relevante array afhængig af inputnr.

>>thesurfer
Tak for hjælpen - smid et svar :-)
Avatar billede thesurfer Nybegynder
03. december 2006 - 21:27 #12
Nice :-)

Svar smidt :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester