Avatar billede Slettet bruger
04. januar 2003 - 04:57 Der er 17 kommentarer og
3 løsninger

Tekstfil eller database

Her kommer et større spørgsmål vedr. mit program!
Jeg har lavet er program der gemmer indtægter og udgifter fra tekstfelter ala ind1.Text i en tekstfil ud fra en dato.
Altså alle udgifter og indtægter fra den 010103 i 010103.txt
Nu kommer det svære: Jeg vil gerne lave en uge oversigt på de forskellige poster så data fra ind1.Text i 010103.txt til 070103.txt og alle de txtfiler der ligger imellem også kommer med i en Label ala ind1Label.Caption = Temp$

Jeg ville da helst ha gemt alle dataerne fra de forskellige datoer i en fil men jeg ved ikke hvordan jeg skal gøre det og hvordan man henter specifike data i EN fil.
Nu er der sikkert noget der vil foreslå at jeg laver en database i Access men det ved jeg ikke hvordan jeg arbejder med så derfor txtfilerne.
Da jeg tror det er et større problem er der 200 points på spil.

T2C
Avatar billede martin_moth Mester
04. januar 2003 - 13:29 #1
Fatter ikke helt dit problem - hvor mange tekstfiler har du, og hvad står der i dem, og hvad er egentligt problemet), men her en generel løsning til at hente/gemme udvalgte data i en tekstfil.

Gem dataene linie for linie. Hver linie kan du lade starte med et unikt index. Herefter kan du læse filen linie for linie (Et loop der kører til EOF), og tjekke på de første karakterer i hver linie. Er karakterene lig det index du søger har du fundet den ønskede linie i tekstfilen, som du kan læse ind i en variabel.

Du har ret - Access er noget nemmere :o)
Avatar billede terry Ekspert
04. januar 2003 - 13:51 #2
t2c>Access is PERFECT for this. I could put soemthing together but I cant see what you will learn from that. I could also imagine that you will find other ideas and WHO is going to make those? So here is a link which I am sure you will learn something from.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmscadocodeexamplesinvisualbasic.asp

and this link is NOT worth 200 points :o)
Avatar billede Slettet bruger
04. januar 2003 - 16:57 #3
Martin>>Mit problem er hvordan man kan lægge to forskellige linjer sammen fra enten en fil eller fra to filer. Jeg har pt. en fil for hver dato men jeg ville da hellre have sådan at det hele var samlet i en fil.
Mine filer ser sådan her ud nu:
234
3245
24
234
234
osv.
Men jeg ved at man kan lave det samme sådan her:
234,3245,24,234,234
Det jeg så gerne ville var at det kom til at se sådan her ud:
04012003,234,2344,234,34
04012002,2345,234,567,89
Og så skal man kunne lægge fx. 234 sammen med 2345
Jeg håber du fatter hvad jeg mener med det.

T2C
Avatar billede Slettet bruger
04. januar 2003 - 16:59 #4
Terry>> I will look at the link you sendt to me but I´m not good at Access. I have never worked with it before.

T2C
Avatar billede terry Ekspert
04. januar 2003 - 17:08 #5
t2c>I can understand the problem, but you will be better off learning how to use Access yourslef than me or someone else doing it for you. Using Access and other databases is a MAJOR part in making applications, so go for it.
Avatar billede martin_moth Mester
04. januar 2003 - 18:07 #6
Jeg kan sagtens give dig forsleg til tekstfil-løsningen - men jeg går ud fra at du kaster dig over databaser - de er ikke så svære endda, hvis du bare holder det simpelt :o)
Avatar billede Slettet bruger
04. januar 2003 - 18:25 #7
Martin>>Jeg vil gerne at du kom med det forslag til en løsning på tekstfilerne.
Så må der komme en database i version 1.1 :-), hvis jeg ellers kan finde ud af det. Men nu da jeg er ret ny med VB har jeg været på biblioteket og lånt en masse bøger som skulle være til hjælp, så mon det ik går.

T2C
Avatar billede martin_moth Mester
04. januar 2003 - 18:30 #8
Godt - men forklar lige dit spørgsmål ordentligt først, så det ikke går som i www.eksperten.dk/spm/269053.dk

Hvor mange filer har du - hvad indeholder de - og hvad vil du gerne opnå?
Avatar billede martin_moth Mester
04. januar 2003 - 18:35 #9
Sorry, t2c - www.eksperten.dk/spm/269053.dk var jo ikke dig - en bedre forklaring på problemet er dog ønsket :o)
Avatar billede Slettet bruger
04. januar 2003 - 19:05 #10
Martin>> Jeg har et felt hvor man indtaster en dato ala 04012002 så har jeg 8 indtægtsfelter og 8 udgifter et felt med samlet indtægter og et til udgifter. Så er der et felt med over/underskud og et som hedder afregning, altså hver linje skal indeholde 21 data ala 04012003,ind1 data her,ind2 data her, osv

Når man så klikker på en knap og har indtastet en dato i et andet felt skal man kunne se fx. en ugeoversigt 04012003 og til 11012003. Altså felt ind1 den 04012003 + felt ind1 den 05012003 osv = ugeoverLabel.Caption.
Det skal kunne køre selvom der godt kan være at der ikke er en linje der hedder 09012003 "en dag hvor man ikke har haft indtægter og udgifter"
Man kunne evt lave et startdato felt og et slutdato felt og så skal knappen vise resultatet på de linjer der er imellem de to datoer også selom der er mangler datoer imellem start og slut.
Jeg håber du forstå hvad jeg mener ellers må jeg prøve at uddybe det mere.
P.S. Alle dataerne fra de forskellige datoer skal ligge i den samme txt fil.

T2C
Avatar billede martin_moth Mester
04. januar 2003 - 19:19 #11
OK - forstået. Vender snarest tilbage - det kan løses meget nemt, men kæresten mener jeg skal vaske op :o(
Avatar billede martin_moth Mester
04. januar 2003 - 20:22 #12
Ide til løsning:

Alle dine felter gemmes i hver deres linie i en textfil, adskildt af fx. et seimkolon-tegn. Dette er din "database"

En linie i din tekst-fil kan altså se således ud:
04012002;2345;234;567;89

Herefter kan du hente en bestemt linie med en bestemt dato fra din tekst-fil ved at læse tekstfilen linie for linie. Dette gøres nemmest - synes jeg - ved at læse hele filen ind i et array, hvor hver plads i arrayet indeholder en linie fra filen. Herefter skal du blot vælge den tekststregn i arrayet, hvor datoen passer - dvs den linie hvor de første 8 tegn matcher den dato du søger.

De enkelte poster i arrayet (der svarer til de enkelte linier i filen) kan du dele op i de felter de oprindeligt bestod af ved funktionen split(), og vælge @ som split-tegn.

Tilsvarende kan du oprette en ny post i arrayet, og skrive den til din tekstfil.

Det var ideen - her kommer koden:

1) ÅBNE TEKSTFILEN OG LÆSE DEN IND I ET ARRAY:

Dim FilNummer As Integer
  Dim i As Integer
  Dim Linie As String
  Dim LinieArray() As String

'Tæller antal linier i filen
  FilNummer = FreeFile
  Open Filnavn For Input As #FilNummer
  i = 0
  Do While Not EOF(FilNummer)
    Line Input #FilNummer, Linie
    i = i + 1
  Loop
  Close FilNummer
 
'Redimensionerer arrayet til at indeholde fra 0 til i pladser (= antal linier)
  ReDim LinieArray(i)

'Læser alle filens linier ind i et aray
  FilNummer = FreeFile
  Open Filnavn For Input As #FilNummer
  i = 0
  Do While Not EOF(FilNummer)
    Line Input #FilNummer, LinieArray(i)
    i = i + 1 'i = linienummer
  Loop
  Close FilNummer

Ovenstående kode smider samtlinie linier i filen ind i hver deres plads i arrayet.

2) FINDE EN POST I ARRAYET HVOR DATOEN PASSER MED FX. 04012002:

  Dim RigtigLinie as String
  Dim i as integer
  For i = LBound(LinieArray) To UBound(LinieArray)
    if left(LinieArray(i),8) = "04012002" then Rigtiglinie = LinieArray(i)
  Next i

Ovenstående kode finder linien med dato 04012002 og indlæser linien i RigtigLinie

3) OPDELE EN TEKSTSTRENG I FELTER:
 
Brug funktionen split - kik i VB-hjælpen. Det beder du egentligt ikke om i dit spørgsmål, men du får alligevel lidt kode, da den kan være meget nyttig
 
  Dim FeltArray() as String
  Dim i as integer
  FeltArray = split(RigtigLinie, "@")
  For i = LBound(FeltArray) to UBound(FeltArray)
   
4) SKRIVE ARRAYET TIL FILEN IGEN SAMT FELTER TIL EN NY LINIE I FILEN
  Dim FilNummer As Integer
  Dim i As Integer
  Filnummer= Freefile
  Open Filnavn For output As #Filnummer ' <- Bemærk, at der står Output!
  for i=LBound(LinieArray) to Ubound(Liniearray)
    Print #FilNummer, liniearray(i) '<-Skriver linier til filen igen
  next i
  Print #FilNummer, text1.text & ";" & text2.text & ";" & text3.text '<- tilføjer en ny linie i filen

Volia. Her er alt hvad du skal bruge, så er det bare klippe-klistre. Valgte du at bruge et par timer på at forstå database-løsningen, kunne det samme gøres med blot et par liniers kode eller 3 - altså 100 gange simplere, og du ville let kunne sortere osv. Men du valgte selv tekstfilløsningen - et dårligt valg efter min mening  - men nu har du fået den (hvad gør man ikke for 200 points ;o)
Avatar billede martin_moth Mester
04. januar 2003 - 20:23 #13
PS: Der hvor jeg skriver "vælge @ som split-tegn" mener jeg naturligvis "vælge ; som split-tegn"
Avatar billede martin_moth Mester
04. januar 2003 - 20:25 #14
Og FeltArray = split(RigtigLinie, "@") skal rettes til FeltArray = split(RigtigLinie, ";") - har byttet lidt rundt på @ og ;
Avatar billede Slettet bruger
04. januar 2003 - 20:30 #15
Martin>> Det ser fint ud og det ligner meget det jeg sider og læser lige nu i Grundlæggende programmering med VB6 af Michael Cronberg. :-)
Jeg kikker lige på det og prøver at få det til at passe ind i mit program.

T2C
Avatar billede martin_moth Mester
05. januar 2003 - 10:39 #16
OK! Spørg videre, hvis der er noget du ikke har forstået
Avatar billede Slettet bruger
07. januar 2003 - 19:44 #17
Jeg gider ikke at bruge mere tid på de txt filer og er gået igang med at arbejde med access. Jeg har oprettet et nyt spm http://www.eksperten.dk/spm/302195
som henvender sig til det.
Men ret skal være ret og hermed points for indlæg og hjælp til Martin og Terry.

T2C
Avatar billede Slettet bruger
07. januar 2003 - 19:46 #18
Men jeg syntes måske det er lidt meget med 190 til dig Martin for dit indlæg så jeg gir 100 til dig og 10 til Terry. Hvis det ikke er godt nok må I sige til så finder vi ud af det.

T2C
Avatar billede terry Ekspert
07. januar 2003 - 20:30 #19
fine t2c>I think your best bet is go to the library "bibliotek" and loan some books in Danish. VB6+Acess
Avatar billede martin_moth Mester
08. januar 2003 - 09:24 #20
/Tak for pts :o)
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