04. januar 2003 - 04:57Der 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.
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.
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
Synes godt om
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>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.
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)
Synes godt om
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.
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.
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)
Og FeltArray = split(RigtigLinie, "@") skal rettes til FeltArray = split(RigtigLinie, ";") - har byttet lidt rundt på @ og ;
Synes godt om
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.
OK! Spørg videre, hvis der er noget du ikke har forstået
Synes godt om
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
Synes godt om
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.
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.