Hjem Personlig finansiering C Programmering: Slik får du tilgang til filer lagret i tilfeldig lagring - dummier

C Programmering: Slik får du tilgang til filer lagret i tilfeldig lagring - dummier

Innholdsfortegnelse:

Video: From C to Python by Ross Rheingans-Yoo 2024

Video: From C to Python by Ross Rheingans-Yoo 2024
Anonim

Tilfeldig filtilgang i C programmering har ingenting å gjøre med tilfeldige tall. Snarere kan filen nås til enhver tid her, der, og til og med. Denne typen tilgang fungerer best når filen er stiplet med poster av samme størrelse. Begrepet av poster bringer opp strukturer, som lett kan skrives til en fil og deretter hentes individuelt, selektivt eller alt på en gang.

Slik leser du og spole tilbake

Når programmet leser data fra en fil, holder den styr på posisjonen der data leses i filen. En markørposisjon opprettholdes slik at plasseringen hvor koden leser eller skriver i en fil, ikke går tapt.

Når du først åpner en fil, er markørposisjonen i begynnelsen av filen, den første byte. Hvis du leser en 40-byte-plate i minnet, er markørposisjonen 40 byte fra starten. Hvis du leser til slutten av filen, beholder markørposisjonen den plasseringen også.

For å holde ting forvirrende, blir markørposisjonen ofte referert til som en filpeker , selv om det ikke er en pekervariabel eller en FIL-type peker. Det er bare plasseringen i en fil der neste byte av data blir lest.

Du kan rotere med markørposisjonen ved å bruke flere interessante funksjoner i C. To av dem er ftell () og tilbakespoling (). Funksjonen ftell () returnerer gjeldende markørposisjon som er offset som en lang int-verdi. Tilbakespoling () -funksjonen beveger markøren tilbake til starten av filen.

Mens løkken i Tell and Rewind leser i poster fra obligasjonen. db-fil. På linje 28 returnerer funksjonen ftell () markørposisjonen. Hvis det er større enn en oppføring (som betyr at den andre oppføringen er lest), blir markørposisjonen nullstilt til begynnelsen av filen ved å spole tilbake () på linje 29.

TELL OG REWIND

#include # inkludere #include int main () {struct entry {char actor [32]; int år char tittel [32];}; struktur entry bond; FIL * a007; int teller = 0; a007 = fopen ("bond. db", "r"); hvis (! a007) {setter ("SPECTER vinner!"); utgang (1);} mens (fread (& bond, sizeof (struct entry), 1, a007)) {printf ("% st% dt% sn", obligatorisk skuespiller, obligasjon. år, obligasjon. hvis (ftell (a007)> sizeof (struct entry)) spole tilbake (a007); teller ++; hvis (telle> 10) pause;} fclose (a007); returnere (0);}

For å bestemme riktig forskyvning, sammenligner en if-setningen resultatet fra ftell () -funksjonen og størrelsen på operatøren på strukturinngangen. Husk at ftell () bare returnerer en lang int verdi, ikke et bestemt antall strukturer.

Variabeltallet, deklarert og initialisert på linje 14, holder oversikt over hvor mange ganger mens sløyfen gjentar. Hvis det ikke gjorde det, ville programmet løpe uendelig. Det er ille. Så når verdien av tellingen er større enn 10, slår sløyfen og så lukkes filen og programmet avsluttes.

Øvelse 1 : Skriv kildekoden fra Tell and Rewind til redaktøren din. Bygg og kjør for å se hvordan ftell () og tilbakespoling () fungerer.

Hvordan finne en bestemt plate

Når en fil inneholder poster av samme størrelse, kan du bruke fseek () -funksjonen til å plukke ut et enkelt element. Formatet for fseek () er

fseek (håndtere, offset, hvorfra);

håndtak er et filhåndtak, en FILE-peker som representerer en fil som er åpen for lesing. offset er antall byte fra start, slutt eller nåværende posisjon i en fil. Og hvor er en av tre konstanter: SEEK_SET, SEEK_CUR eller SEEK_END for henholdsvis start, nåværende stilling eller slutten av en fil.

Så lenge filen inneholder poster med en konstant størrelse, kan du bruke fseek () for å plukke ut en bestemt plate, som vist i Finn en bestemt post i en fil.

Finn en spesiell liste i en fil

#include #include #include int main () {struct entry {char actor [32]; int år char tittel [32];}; struktur entry bond; FIL * a007; a007 = fopen ("bond. db", "r"); hvis (! a007) {setter ("SPECTER vinner!"); utgang (1);} fseek (a007, sizeof (struct entry) * 1, SEEK_SET); fread (& bond, sizeof (struct entry), 1, a007); printf ("% st% dt% sn", obligasjon. skuespiller, obligasjon. år, obligasjon. tittel); fclose (A007); returnere (0);}

Koden som vises i Finn en bestemt post i en fil er igjen ganske lik koden vist i liste 22-9. Det store tillegget er fseek () -funksjonen, vist på linje 21. Den setter markørposisjonen slik at fread () -funksjonen som følger (se linje 22) leser i en bestemt plate som er plassert inne i databasen.

I linje 21 undersøker fseek () -funksjonen filen som er representert ved håndtaket a007. Forskjellen beregnes ved å multiplisere størrelsen på inngangsstrukturen.

Som med en matrise, multipliserer denne størrelsen med 1, andre -oppføringen i filen; multipliser verdien med 0 (eller bare spesifiser 0 i funksjonen) for å lese den første posten. SEEK_SET-konstanten sikrer at fseek () begynner å se fra begynnelsen av filen.

Kodenes nettoreffekt er den andre posten i obligasjonen. db-filen vises.

Oppgave 2: Skriv kildekoden fra Finn en bestemt post i en fil. Bygg og kjør for å se den andre posten i filen.

C Programmering: Slik får du tilgang til filer lagret i tilfeldig lagring - dummier

Redaktørens valg

Speil Lockup (MUP) på Nikon D7100-dummies

Speil Lockup (MUP) på Nikon D7100-dummies

En komponent i det optiske systemet til din Nikon D7100 kamera er et speil som beveger seg hver gang du trykker på lukkerknappen. Den lille vibrasjonen som følge av speilets handling kan føre til svak utryddelse av bildet når du bruker en veldig langsom lukkerhastighet, skyter med en lang teleobjektiv, ...

Opptaksmuligheter på Nikon D5300 - dummies

Opptaksmuligheter på Nikon D5300 - dummies

Du kan styre noen få aspekter av din filmoppgave på din Nikon D5300. Du kan manipulere videoen din for å skape en rekke effekter. Følgende liste går gjennom disse alternativene: Eksponeringsmodus: Du kan ta opp filmer i hvilken som helst eksponeringsmodus (Auto, Scenemodus, Effektmodus, P, M, og så videre). Som med fortsatt ...

Hvordan man manipulerer eksponering og kontroll på Nikon D5600-dummies

Hvordan man manipulerer eksponering og kontroll på Nikon D5600-dummies

Følgende retusjonsverktøy på din Nikon D5600 kamerajustering eksponering og farge: D-Lighting, Quick Retouch, Filter Effects og Monochrome. Selv om disse verktøyene ikke får deg til å velge ett kamera over en annen, hvis du allerede har en Nikon D5600, er de tilgjengelige, så du kan også lære å bruke dem! D-Lighting: Active D-Lighting ...

Redaktørens valg

DOs og DON'Ts of Fantasy Basketball Draft Picks - dummies

DOs og DON'Ts of Fantasy Basketball Draft Picks - dummies

Hvis du vurderer bli med i en fantasy basketball liga, må du ta hensyn til følgende DOs og DON'Ts før du vurderer spillerne du vil utarbeide på laget ditt. Kreditt: © iStockphoto. com / IS_ImageSource Fantasy basketball draft pick DOS I de fleste fantasy basketball ligaer bestemmer kommisjonen (personen som setter opp ligaen) bestillingen i ...

Linjene og dimensjonene til en basketballbane - dummies

Linjene og dimensjonene til en basketballbane - dummies

En basketballbane har symmetri; Den ene halvdelen av retten er et speilbilde av den andre. Hele basketballbanen (se figur 1) er 94 fot med 50 fot. På hver halvplass viser malte linjer fritt korsbanen og sirkelen, samt trepunktsbuen, hvis avstand fra kurven varierer basert ...

Kjøp av gratis agenter i fantasy fotball - dummies

Kjøp av gratis agenter i fantasy fotball - dummies

I løpet av fantasy fotball sesongen, spillere som ikke blir utarbeidet bli gratis agenter - spillere tilgjengelig for enhver ligamatch villig til å slippe en eid spiller. Bruk gratis agentbassenget til å erstatte en skadet spiller eller noen som bare ikke lever opp til dine forventninger. Bruk disse tipsene for å finne en gratis agent for å ...

Redaktørens valg

Grunnleggende for din iOS-app - dummies

Grunnleggende for din iOS-app - dummies

Heldigvis mesteparten av det du trenger å gjøre så langt som iOS animasjon er opptatt er allerede bygd inn i rammen. Noen visningsegenskaper kan animeres, noe som betyr at du bare må fortelle visningen hvor du skal begynne og hvor du skal avslutte flyttingen, og noen få andre valgfrie parametere, og du er ferdig. ...

Montering av verktøylinjen for Android App Development - dummies

Montering av verktøylinjen for Android App Development - dummies

Når du vet at du er klar til være en Android-utvikler, ta tak i datamaskinen din og få sprekker på å installere verktøyene og rammene som er nødvendige for å bygge ditt første blockbuster-program. Linux-kjernen Android ble opprettet på toppen av åpen kildekode Linux-kjernen. Android-teamet valgte å bruke denne kjernen fordi den ga bevist ...

Grunnleggende om Cocoa Touch i iOS Apps - dummies

Grunnleggende om Cocoa Touch i iOS Apps - dummies

Cocoa Touch-laget inneholder det meste av objektet -orientert utvikler-vendt rammer for å bygge iOS applikasjoner. Det er ditt eneste utgangspunkt for app-utvikling. Apple-guiderne oppfordrer deg til å undersøke teknologiene i dette laget for å se om de oppfyller dine behov, før du ser på de andre lagene. Med andre ord, Apple har til hensikt å ...