Avatar billede adagio Nybegynder
19. oktober 2002 - 00:02 Der er 30 kommentarer og
2 løsninger

2 spørgsmål: Combobox og txt filer...

Lige nu er jeg igang med et lille program som laver en hurtig oversigt over mine film...

1.
Jeg har lavet det sådan at programmet læser en txt fil, og overfører alle linjerne (hver for sig) ind i en listbox (dvs en film per linje), hvor man derefter kan finde filminformationerne i en anden txt fil (som har filmens navn)...Det virker fint, men jeg har ingen anelse om hvordan man kan lave en sletning af en bestemt film.

Spørgsmålet er hvordan man kan slette en bestemt linje i txt filen, med film-navnet? (Navnet på filmen vælger jeg et andet sted i programmet).

Her er et exempel:

Film1
Film2
Film3

Vis jeg nu vil slette film2, så skal det gerne se sådan her ud:

Film1
Film3

Derefter skal den anden txt fil (med film navnet) slettes...hvordan gøres det?

2.
I samme program har jeg også en redigering/oprettelse af film. Man opretter filmene ved at vælge bestemte informationer i diverse comboboxe. I samme form ønsker jeg dog også en liste, hvor ens film liste er (Den virker), når man så trykker på en film på den liste, så skal de forskellige comboboxe, blive valgt til nogle bestemte informationer (comboboxene har Max 4 valgmuligheder...jeg ved hvordan disse informationer findes)

Der gives 15 point til hver spørgsmål...
Avatar billede tubber Juniormester
19. oktober 2002 - 02:22 #1
Hvis det skal være så omfattende vil jeg foreslå en db, det vil også give lidt mere styr på da der ikke er alle de små filer........

Jeg kan maile dig et lignende projekt....
så kan du kigge lidt på det :O)
Avatar billede joern Nybegynder
19. oktober 2002 - 06:55 #2
Hej.

Jeg arbejder selv med ascii-filer som mine databaser og kender en løsning på dine spørgsmål.
Men inden jeg fylder kode ind her, vil jeg se om du skifter til at anvende access eller lignende.

http://www.jkfsoft.dk/baser.htm

M.v.h.  Jørn
Avatar billede tubber Juniormester
19. oktober 2002 - 07:48 #3
joern:

Nu er jeg ikke lige så meget inde i at bruge tekstfiler, og ikke jeg siger det er en dårlig løsning......

Men jeg kunne godt tænke mig lige at vide hvad der er af fordele i det ?

Fordi jeg forslår access er ikke at jeg mener det er bedre end ascii baser, men jeg syntes det ville virker forvirrende med en tekstfil til hver film, det giver nemt flere hundrede tekstfiler....

/Tubber
Avatar billede adagio Nybegynder
19. oktober 2002 - 12:13 #4
Jeg har valgt at bruge txt filer istedet for database af 2 grunde:

1. Et program der bruger access database ser for vildt grimt ud
2. Eftersom at jeg ikke er så meget inde i programmering, så valgte jeg at bruge det, som jeg kender lidt til... (Dog er det første grund, som vejer mest på valget)
Avatar billede adagio Nybegynder
19. oktober 2002 - 12:26 #5
En anden måde, spørgsmål 1 problemet kan løses (delvist...men ok) er ved at få programmet til at undersøge om filmen allerede findes i liste txt'en. Vis den ikke findes, så skal den oprette filmen. Dvs jeg ønsker bare at kunne finde ud af om det findes, og give et svar (måske true/false svar) om det findes...
Avatar billede tubber Juniormester
19. oktober 2002 - 13:00 #6
Der må du have mig undskyldt, men hvordan ser et database program anderliedes ud end andre ?

Når jeg bruger DB så er det uden de databaske kontroller der er i VB så det er faktisk magen til når andre laver det med TXT filer.....

Hvis du vil se er du stadig velkommen til at få det program jeg har lavet......
Avatar billede adagio Nybegynder
19. oktober 2002 - 14:06 #7
Okay, det lyder lidt mere interessant...jeg har dog kun set programmet, som har disse database kontroller på...

Så vis du vil være så venlig at sende det til mig, så jeg kan se, om det er noget jeg kan bruge. Mit ICQ nummer er 87239215 (Dog er jeg nok ikke online før engang i aften, da jeg skal afsted om kort tid...)
Avatar billede martin_moth Mester
19. oktober 2002 - 14:16 #8
adg og tubber --> Jeg er 100% enig med tubber - hvordan dit program ser ud afhænger overhovedet ikke (!!!) af, om du bruger databaser eller textfiler. Jeg kan lave to programmer, der ligner hinanden 100%, hvor det ene bruger database og det andet tekstfiler...

Desuden vil jeg mene, at når man lige har givet sig tid til at forstå hvordan VB snakker sammen med en "ægte" DB, så er det meget lettere at håndtere data med en "ægte" DB og ikke tekstfiler. At slette en post i en database kræver vist ikke mere end een linie kode, og at gøre det tilsvarende i en tekstfil, kræver, at du finder linien, sletter den, og sletter den anden fil fysisk fra din HD, som beskrevet nedenfor:

Nå - tilbage til dit oprindelige spørgsmål:

Jeg ville lave et array og indlæse linierne heri, slette filen, slette den aktuelle post i arrayet, og skrive det reducerede array til en ny fil.

Er der rigtig mange linier i filen og arrayet derved bliver meget stort, er det måske smartere at oprette en ny fil, og læse din oprindelige fil linie for linen, skrive hver linie til den ny fil lige så snart du har læst linien, og så naturligvis springe den linie der skal slettes over. Derefter sletter du den oprindelige fil, og omdøber den nye fil til den oprindelige fils filnavn.

Du sletter en fil vha. kommandoen Kill filnavn

Du kan omdøbe en fil på mange måder, den simpleste er nok at bruge Shell delete filnavn.

Se i øvrigt http://www.eksperten.dk/spm/133851, hvor de to løsningsmuligheder jeg har givet er skrevet i lidt flere detaljer...

Som du sikkert kan fornemme - det er cirka 1.000.000 gange nemmere og mere elegant med en rigtig database, og der ER ret nemt at finde ud af - der er masser af besvarede spørgsmål omkrine emnet her på eksperten :o)
Avatar billede martin_moth Mester
19. oktober 2002 - 14:19 #9
PS:
Jeg skrev:
Du kan omdøbe en fil på mange måder, den simpleste er nok at bruge Shell delete filnavn
Men jeg mente:
Du kan omdøbe en fil på mange måder, den simpleste er nok at bruge Shell rename filnavn nytfilnavn
Avatar billede adagio Nybegynder
19. oktober 2002 - 15:33 #10
Takker for svaret, kigger det lige igennem nu, men umiddelbart kan jeg ikke lige se hvordan jeg kan slette en linje, som ikke er bestemt af af linje-nummer, men af hvad der står deri... Jeg er ret newbie til programmering...
Avatar billede joern Nybegynder
19. oktober 2002 - 16:24 #11
Hej igen.

Her er en dugfrisk slettefunktion med ascii.filer.

Private Sub knsleturl_Click()
  linien = lsturl.Text
  Open netsti & "musikurl.dat" For Input As #10
  Open netsti & "musikurl.bak" For Output As #11
    Do While EOF(10) = False
      Line Input #10, linie
      If linie = linien Then GoTo hop
      Print #11, linie
hop:
    Loop
  Close #10
  Close #11
  FileCopy netsti & "musikurl.bak", netsti & "musikurl.dat"
End Sub

Det er en liste over URL'er begribeligvis.

M.v.h.  Jørn
Avatar billede martin_moth Mester
19. oktober 2002 - 17:36 #12
adq > Hvis du VIL beholde din løsning med text-filer, så er det da bare at bruge den løsning jeg gav - læs filen linie for linie, og tjek hver gang liniens indhold. Min løsning involvere ikke noget med bestemte linienumre :o))
Avatar billede adagio Nybegynder
19. oktober 2002 - 19:37 #13
Ok, så er det bare mig, som har forstået koden forkert... Joerns kode ligner også noget som læser en bestemt linje...men nu har jeg lige 20 minuter til at afprøve koden i, så må vi se om jeg kan få det til at virke...
Avatar billede joern Nybegynder
19. oktober 2002 - 20:28 #14
adq>

Jeg har udvalgte poster i en listeboks, posterne er unikke.

Jeg klikker på en linie i listen og indlæser den i variablen 'linien'

Så åbner jeg ascii-filen og læser 1 linie ad gangen.  Linierne skrives til en anden fil, undtagen den der er identisk med variablen 'linien' - ved den udføres hop til labelen hop:
Derpå læses alle efterfølgende linier over i den nye fil.
Begge filer lukkes og fil-2 kopieres over i (og overskriver) fil-1.
Fil-2 slettes ikke, den fylder ikke noget af betydning, men fil-2 behøver ikke at findes første gang, når der åbnes med 'output' vil den blive oprettet.

Jeg bruger samme fremgangsmåde når jeg ændrer i eksisterende poster, men dog med lidt mere kode fordi hver post ellers består af flere felter (linier afsluttet med 'Enter').

I denne liste er hver post kun på 1 linie.

Ang. 4 combobokse, så får de vel deres indhold fra nogle filer?    Den liste der indeholder filmene må jo nødvendigvis indeholde unikke henvisninger til de data der passer til filmen (med nr. eller ??)

Du kommer nok til at uddybe, hvis jeg skal svare kvalificeret.

M.v.h.  Jørn
Avatar billede adagio Nybegynder
19. oktober 2002 - 21:55 #15
Ang 4 comboboxe, så har jeg smidt alle informationerne ind i lblFilminfo(i) (0-4). I lblFilminfo(0) (for at tage et eksempel) står der f.eks 0 for "Dansk", 1 for "Engelsk" osv (Så jeg har læst informationerne ind i programmet)...

Håber det er nok info (Ellers vis du mangler noget info, så sig til...)

Tak for den nærmere forklaring Joern, nu forstår jeg koden, og det ser ud til at virke (sletningen fra liste txt filen)... der er dog stadig et mindre problem, men det ligger uden for spørgsmålene, som jeg ikke har fået fixet endnu, men jeg har også kun lige fået det til at virke for 10 min siden (og det er kun et lille opdaterings problem...), så jeg regner med (håber) at jeg får det klaret snart... ;o)
Avatar billede adagio Nybegynder
19. oktober 2002 - 22:33 #16
Ok, det ser ud til at jeg har fået klaret det lille problem, så nu er det kun comboboxene som mangler...
Avatar billede joern Nybegynder
19. oktober 2002 - 23:23 #17
adq>>

Hvis et klik på en linie i en liste (eller combo) skal kunne indstille nogle værdier i en anden liste, så må den første liste på en eller anden måde indeholde information om, hvilken værdi, der skal indstilles.

F.eks.  Mord i Mørket 3147

3 kan betyde 'Dansk'
1 kan betyde 'Krimi'
4 kan betyde 'forbudt for børn'
7 kan betyde 'Fås på video'

Sådan ville man lave en base i gaaamle dage, da plads var et problem.  Idag kan basis-filen om film ligeså godt indeholde informationerne direkte.

For at slippe for at indtaste alle ordene ved oprettelser, kan man fixe noget med klik i lister eller lign.

Men jeg har sikkert misforstået opgaven, så det må bukkes i Neon.

----------------------------
Man kan sagtens arbejde med ascii-filer som database med mange linier (felter) for hver post.  Der skal bare være samme antal for alle poster.
-----------------------------
Jeg står af nu, godnat.

M.v.h.  Jørn
Avatar billede adagio Nybegynder
19. oktober 2002 - 23:42 #18
Jeg tror du har misforstået noget (Jeg har nok forklaret forkert...det er jeg god til :o( ). Det jeg mente var, at når man klikker på en film i lstFilm, så læser den fra lblFilminfo(0) tallet '0' (for at tage et eksempel), hvor den så skal vælge (automatisk) 'Dansk' fra comboboxen comLang
Avatar billede tubber Juniormester
19. oktober 2002 - 23:46 #19
Hvis det SKAL være text filer, kunne man jo kalde dem for ini....
Så får man sådan lidt en ordnet struktur.....xml agtig.....

bare lige endnu en kommentar.......
Avatar billede adagio Nybegynder
19. oktober 2002 - 23:51 #20
Du mener bare at omdøbe fra *.txt til *.ini?
Avatar billede adagio Nybegynder
19. oktober 2002 - 23:56 #21
Og ja, jeg holder mig til text filer for nu, da jeg ikke har så meget tid til at lære nye ting (altså andre ting end det vi lærer i skolen)...jeg er ikke ligefrem lærenem...så jeg holder mig til det jeg kender nogenlunde...
Avatar billede tubber Juniormester
20. oktober 2002 - 00:00 #22
Nej det er ikke helt nok, det kræver en function, men så kommer det noget lignende det her:

[Sommer i Tyrol]
Sprog=Dansk
Med=Dirch Passer
Undertekster=Nej

og når man så laver sit kald går den efter det i [].....

Hvis du/i vil se mit program kan i hente det på:

http://home1.stofanet.dk/krog-frandsen/CD-Database.exe

Når i bliver bedt om navn under install skal i skrive jeres navn, det bruger den til når man taster navnet ind som ejer, der skriver den det man skriver under install som standard (fra en INI dog kodet i c++) men der er andre ini kald og database kald i den.....

Søge funktionen er dog uden wildcard, da jeg ikke har haft tid til at finde ud af hvodden det kodes.....

/Tubber
Avatar billede tubber Juniormester
20. oktober 2002 - 00:00 #23
skal lige sige det er installations programmet og ingen source, men i kan kigge og har det interesse så smider jeg da gerne lidt kode.....
Avatar billede joern Nybegynder
20. oktober 2002 - 10:47 #24
Hej.
Ideen med opbygning som ini-fil er uanvendelig tubber!  Jeg har anvendt sekventielle filer til opbevaring af data siden først i 80'erne.

At bruge en færdig database gør et program hurtigt at opbygge, man får foræret mulighed for indeksering, i hvert fald på 1 unik nøgle.  Indeksering betyder hurtigere søgning, men også mindre smidig søgning.
Dertil kommer at felter skal have fast længde (som kan være stor), men det gør så også basen stor ,selv om den mest indeholder blanktegn.

Men kan sagtens opbygge en relations-database selv med tekstfiler, som jeg kalder ascii-filer, fordi de ikke indeholder andre tegn end de som kan indsættes fra tastaturet uden brug af CTRL-tasten.

Jeg har et program til registrering af videooptagelser.  Ikke så velegnet til registrering af film, instruktører, skuespillere o.s.v., men bygget til optagelser man selv har lavet med sin camcorder.  http://www.jkfsoft.dk/video32.htm

Hoveddatabasen indeholder følgende for hver post:

80301:00:00
06:00
00121
Felix sover i vindueskarm og rundt i rum 104  noget af det er flimrende
gruppe-7
projekt
14/ 03- 1993
1
mo
er-*2^ -er

bråbyvej 43 E
bråbyvej 43 E






hver linie afsluttes med VBCRLF (Enter eller ascii 13 & ascii 10)

Når filen åbnes og læses med 'Line Input' læses netop frem til næste VBCRLF.  Feltlængden er i praksis ubegrænset (64.000 tegn)

Første linie indeholder den unikke ID, nemlig båndnummer og tællerstand på båndet.
80301:00:00        Nr. 803 og 1 time 0 minutter og 0 sekunder.

En anden base indeholder 'kategori'

Byliv
Debat
Erindring
Handel
Interiør
Krimi
Musik
Natur
Reportage
Spillefilm
Teknik
Tøsesnak
Undervisning

Denne base benyttes til opslag ved indtastningen, ordet indsættes i hoveddatabasen med et klik i en liste.

Det er linierne:  'gruppe-7' og 'projekt'

Databasen er ikke i brug hos mig endnu, jeg benytter stadig dens forgænger der er udviklet i DSI=base.  Når jeg flytter data over via CSV-fil er der stadig for mange poster, der bliver korrupte.

adq må gerne låne kildekoden til inspiration, meddel i så fald e-mail adr.
Den er skrevet i VB5.

Jeg er ikke hjemme igen før i aften idag.

M.v.h.  Jørn
Avatar billede adagio Nybegynder
20. oktober 2002 - 12:17 #25
Tak...Tubber's program ser da interessant ud, dog får jeg nok ikke tid til at kigge på det, før engang til jul (ved juleferie), og der skulle nok ligge nogle eksempler om det på planet-source-code, som jeg kan søge efter til den tid...

Joern >> Det program du henviser til, ser da fint ud, men det er ikke helt det jeg mangler, da det ser(ud fra screenshots) ikke ud til at det har nogle comboboxe, som jeg bruger i mit program

Vis du ønsker at se nærmere på mit program, så kan jeg da uploade koden dertil (Dog skal du så ikke begynde at kigge for nøje på alle kode linjerne, da der sikkert er en hel masse overflødige koder hist og her...så programmet ser ikke ud til meget...
Avatar billede adagio Nybegynder
20. oktober 2002 - 17:36 #26
Jeg tror jeg har fundet ud af hvordan det med comboboxene virker...men jeg holder lige spørgsmålet oppe til jeg er helt sikker på det virker...
Avatar billede adagio Nybegynder
20. oktober 2002 - 17:43 #27
Til nu ser det ud til at svaret på problemet faktisk var meget simpelt:

Select Case lblInfo(0)
    Case 0
        comLang = "Dansk"
    Case 1
        comLang = "Engelsk"
end select

Tror at jeg har prøvet alt andet...
Avatar billede tubber Juniormester
20. oktober 2002 - 17:46 #28
Hmmm hvorfor vil du egenligt have en combobox til det ?

Hvis den bare skal læse det ind så det kommer til at stå der, så kan du vel egenligt lige så godt lave det med et textfelt ?

/Tubber
Avatar billede adagio Nybegynder
20. oktober 2002 - 18:14 #29
Grunden til at det skal være en combobox, er at det skulle gøre det lettere at redigere filmene...Dvs hvor man vælger sproget fra combo'en, gemmer filmen, næste dag ønsker man måske at ændre sproget til engelsk, istedet for dansk, så vælger man bare filmen i listen, hvorefter comboboxen så viser filmens sprog, men man kan alligevel hurtigt vælge et nyt sprog...

Vis det var textbox, så skulle man skrive sproget ind...Og som mit program er lavet, så kan en lille fejlindtastning få programmet til at gå ned...
Avatar billede adagio Nybegynder
20. oktober 2002 - 18:16 #30
Jeg takker for svarene...

Jeg vælger at give både Martin og Joern 15 point...jeg brugte godt nok Joerns svar, men Martin var hurtigere, og det var vel ca. det samme svar i gav...

Og så fandt jeg selv ud af hvordan det med combo'er virkede :o)
Avatar billede tubber Juniormester
20. oktober 2002 - 18:31 #31
hmmmm.....jeg ved ikke lige hvad ideen med det er.

Har man en dansk film, så er den jo ikke på engelsk næste gang man ser den......

Hvis det er til at skrive ind med, så ville jeg lave en ny form der loader til at skrive film ind i, og der kan man så smide en combobox....
Det gør det nemmere at undgå fejlredigering.....
Avatar billede adagio Nybegynder
20. oktober 2002 - 18:53 #32
Det er netop sådan jeg har lavet det...

Det jeg mener med at redigere filmen, er (for at give et eksempel):

Jeg har optaget en film, fra et eller andet tysk program, som jeg så skriver ind i programmet (altså at sproget er på tysk), men en uge efter kommer samme film, på et dansk program, og eftersom jeg fortrækker at høre filmen på engelsk, så overskriver jeg den gamle film, med den nye indstilling i sproget (=Engelsk)

Det kan også bare være at man skriver forkert når man opretter filmen, efter et par dage finder man ud af at det sprog man har angivet ikke passer...Så redigere man det hurtigt i programmets 'opret/rediger film' form
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