Hem Personliga finanser C Programmering: Så här öppnar du filer som lagras i slumpmässig lagring - dummies

C Programmering: Så här öppnar du filer som lagras i slumpmässig lagring - dummies

Innehållsförteckning:

Video: DNA Structure and Replication: Crash Course Biology #10 2024

Video: DNA Structure and Replication: Crash Course Biology #10 2024
Anonim

Slumpmässig filåtkomst i C-programmering har inget att göra med slumptal. Snararen kan filen nås när som helst hither, thither, och även yon. Denna typ av åtkomst fungerar bäst när filen är prickad med poster av samma storlek. Begreppet rekord ger upphov till strukturer, som lätt kan skrivas till en fil och sedan hämtas individuellt, selektivt eller allt på en gång.

Så här läser du och spola tillbaka

Eftersom ditt program läser data från en fil, håller det koll på positionen från vilken data läses i filen. En markörposition bibehålls så att platsen där koden läses eller skrivs i en fil inte går förlorad.

När du först öppnar en fil ligger markörpositionen i början av filen, den första byte. Om du läser en 40-byte-post i minnet är markörens position 40 byte från början. Om du läser till slutet av filen, behåller markörpositionen den platsen också.

För att hålla sakerna förvirrande kallas markörpositionen ofta som en filpekare , även om det inte är en pekervariabel eller en PIL-typ pekare. Det är helt enkelt platsen i en fil där nästa byte av data läses.

Du kan röra med markörpositionen genom att använda flera intressanta funktioner i C. Två av dem är ftell () och spola tillbaka (). Funktionen ftell () returnerar aktuell markörposition som är offset som ett långt int-värde. Spolningen () -funktionen flyttar markören tillbaka till början av filen.

Medans slinga i Tell and Rewind läser i poster från obligationen. db-fil. I linje 28 returnerar funktionen ftell () markörpositionen. Om det är större än en post (vilket betyder att den andra posten har lästs), återställs markörpositionen till början av filen med funktionen spola () på rad 29.

TELL AND REWIND

#include # inkludera #include int main () {struct entry {char actor [32]; int år char titel [32];}; struct entry bond FIL * a007; int tal = 0; a007 = fopen ("bindning db", "r"); om (! a007) {sätter ("SPECTER vinner!"); exit (1);} medan (fread (& bindning, sizeof (struct entry), 1, a007)) {printf ("% st% dt% sn", obligatorisk aktör, obligation. år, obligation. om (ftell (a007)> sizeof (struct entry)) spola tillbaka (a007); räkna ++; om (räkna> 10) bryt;} fclose (a007); returnera (0);}

För att bestämma den korrekta förskjutningen jämför ett if-utfall resultatet från ftell () -funktionen och operatorens storlek på strukturinmatningen. Tänk på att ftell () bara returnerar ett långt int-värde, inte ett specifikt antal strukturer.

Variabelräkningen, deklarerad och initialiserad vid Linje 14, håller reda på hur många gånger som slingan upprepas. Om det inte gjorde, skulle programmet gå oändligt. Det är dåligt. Så när värdet av räkningen är större än 10, går slingan och sedan stängs filen och programmet avslutas.

Övning 1 : Skriv källkoden från Tell and Rewind till din redaktör. Bygg och kör för att se hur ftell () och spolning () fungerar.

Så här hittar du en specifik post

När en fil innehåller poster av samma storlek kan du använda funktionen fseek () för att plocka ut ett enskilt objekt. Formatet för fseek () är

fseek (handtag, offset, varifrån);

handtag är ett filhandtag, en FILE-pekare som representerar en fil som är öppen för läsning. offset är antalet byte från början, slutet eller nuvarande position i en fil. Och varifrån är en av tre konstanter: SEEK_SET, SEEK_CUR eller SEEK_END för respektive start, aktuell position eller slut på en fil.

Så länge din fil innehåller poster med en konstant storlek, kan du använda fseek () för att plocka ut en viss post, som visas i Hitta en specifik post i en fil.

hitta ett specifikt register i en fil

#include #include #include int main () {struct entry {char actor [32]; int år char titel [32];}; struct entry bond FIL * a007; a007 = fopen ("bindning db", "r"); om (! a007) {sätter ("SPECTER vinner!"); utgång (1);} fseek (a007, sizeof (struct entry) * 1, SEEK_SET); fread (& bindning, sizeof (struct entry), 1, a007); printf ("% st% dt% sn", obligation. skådespelare, obligation. år, obligation. titel); fclose (A007); returnera (0);}

Koden som visas i Hitta en specifik post i en fil är återigen ganska lik den kod som visas i Listning 22-9. Det stora tillägget är fseek () -funktionen, som visas på linje 21. Den ställer in markörpositionen så att fread () -funktionen som följer (se Linje 22) läser i en specifik post som finns inne i databasen.

I linje 21 undersöker fseek () -funktionen filen som representeras av handtaget a007. Förskjutningen beräknas genom att multiplicera storleken på poststrukturen.

Som med en matris multipliceras den storleken med 1 med andra -teckningen i filen; multiplicera värdet med 0 (eller bara ange 0 i funktionen) för att läsa den första posten. SEEK_SET-konstanten ser till att fseek () börjar se från början av filen.

Kodens nettoeffekt är den andra posten i obligationslånet. db-filen visas.

Övning 2: Skriv källkoden från Hitta en specifik post i en fil. Bygg och kör för att se den andra posten i filen.

C Programmering: Så här öppnar du filer som lagras i slumpmässig lagring - dummies

Redaktörens val

Nätverksenheter och tjänster Översikt för certifikatprov på CCENT-dummies

Nätverksenheter och tjänster Översikt för certifikatprov på CCENT-dummies

Du kan vara säker på att få några frågor om certifieringsexamen som testar din kunskap om typer av enheter och olika nätverkstjänster. Nedan följer några viktiga punkter att komma ihåg om enheter och tjänster: Nätverksenheter Hubb: Ett nav är en lag 1-enhet som används för att ansluta system tillsammans. När ...

OSI-modell för CCENT-certifieringsexamen - dummies

OSI-modell för CCENT-certifieringsexamen - dummies

Certifieringen certifierar dig kraftigt på OSI-modellen och olika protokoll och enheter som körs på varje lager av OSI-modellen. I följande tabell granskas OSI-modellen genom att ge dig en beskrivning av varje lager och exempel på protokoll och enheter som körs i varje lager. Layer Beskrivning Exempel 7. Applikation ...

OSI-modell för Cisco ICND1-certifieringsexamen - dummies

OSI-modell för Cisco ICND1-certifieringsexamen - dummies

Cisco ICND1-certifieringsexamen testa dig kraftigt på OSI modell och de olika protokoll och enheter som körs i varje lager av OSI-modellen. Följande granskar OSI-modellen genom att ge dig en beskrivning av varje lager och exempel på protokoll och enheter som körs i varje lager. Layer Beskrivning Exempel 7. Applikation ...

Redaktörens val

Hur man skalar på skifferelement i kantfilm - dummies

Hur man skalar på skifferelement i kantfilm - dummies

Skalar ett element i Adobe Edge Animate betyder i huvudsak att du kan ändra storleken på ett element samtidigt som dess proportioner hålls konsekventa om du vill. Du kan: Skalelement med verktyget Transform Skalaelement från Egenskaper-panelen Skalning med verktyget Transform Om du föredrar att använda en klicka-och-dra-metod för skalering ...

Hur man arbetar med mallar i Adobe Edge Animate - dummies

Hur man arbetar med mallar i Adobe Edge Animate - dummies

Mallar introducerades i Edge Animate 2. 0. Denna funktion tar bort nödvändigheten att återuppfinna hjulet varje gång du vill starta en ny komposition. Visst kan du alltid starta en ny komposition från en sparad fil, men Mallar gör att du kan starta ett nytt projekt som redan innehåller attribut och element som du vill ha.

Keyframes Modes in Edge Animation - dummies

Keyframes Modes in Edge Animation - dummies

Keyframe-verktyg i Edge Animate finns till höger om Play-kontrollerna. För att skapa nyckelfiler automatiskt måste du först aktivera nyckelbilder genom att klicka på den röda stoppklockans ikon. Som standard, när du startar en ny animering, är Stopwatch rött men har gråa linjer som löper genom det (som visat). Här är standardstatus för ...

Redaktörens val

Hur man tolkar figurativt språk för GED RLA-dummiesna

Hur man tolkar figurativt språk för GED RLA-dummiesna

Författare använder språk antingen bokstavligt eller figurativt . GED Reasoning Through Language Arts testet kommer att ha några frågor för att testa din förmåga att identifiera skillnaden. En NASA-vetenskapsman kan beskriva en asteroid väldigt bokstavligt: ​​består huvudsakligen av vatten, blandat med vissa stenar och mindre fasta fragment. Eller kan han eller hon skriva figurativt och beskriva ...

Hur (och var) ska schemalägga för att ta GED-dummiesna

Hur (och var) ska schemalägga för att ta GED-dummiesna

För att ta GED test, schemalägger du det baserat på tillgängliga testdatum. Varje stat eller lokalt testcenter ställer in sitt eget schema för GED-testet, vilket innebär att ditt tillstånd bestämmer hur och när du kan ta varje avsnitt av testet. Det bestämmer också hur ofta du kan återta en misslyckad ...

Hur man förbereder sig på GED RLA Extended Response - dummies

Hur man förbereder sig på GED RLA Extended Response - dummies

Uppsats för utvidgad respons på GED Reasoning Through Language Arts-testet kräver några mycket specifika färdigheter, allt från grammatik och korrekt språkanvändning till förståelse och analysförmåga. Om du någonsin har haft ett argument om vem som har det bästa laget eller vilken arbetsgivare är bättre, vet du redan hur man bedömer argument och svarar. ...