Hallo, en welkom terug.
In deze lezing wil ik praten over schrijven naar een bestand.
We gaan ons concentreren bij het schrijven naar een tekstbestand.
Waar gaan we over leren is hoe je karakters kunt schrijven, hoe je
strings kunt schrijven en hoe u kunt geformatteerde uitvoer schrijven.
De drie manieren ook dat we konden lezen.
Er zijn dus drie functies die: je moet er echt
bekend mee zijn om deze dingen te doen.
De eenvoudigste schrijfbewerking is: voorzien in de functie fputc.
Dus net alsof er een fgetc was voor het lezen van karakters is
er een fputc voor het schrijven van karakters.
Dit zal een single schrijven karakter naar een tekstbestand, fputc.
Niet zo efficiënt als schrijven snaren, maar soms noodzakelijk.
Er is een geheel getal voor nodig als zijn eerste parameter en een bestandsaanwijzer
als de tweede parameter en retourneert een geheel getal.
De functie schrijft de karakter gespecificeerd door
het eerste argument voor het bestand geïdentificeerd door het tweede argument.
Dus de bestandsaanwijzer vertegenwoordigt wat het altijd doet: het bestand waarnaar
u wilt schrijven.
En dan het personage dat jij eigenlijk wilt schrijven
naar is uw eerste parameter.
Het geretourneerde karakter is wat is geschreven als het gelukt is.
Onthoud, als het eof teruggeeft, het betekent dat het een mislukking was.
Als het iets anders retourneert dan de eof, het betekent dat het een succes was.
In de praktijk zijn karakters meestal niet één voor één
naar een fysiek bestand geschreven.
Het is extreem inefficiënt.
De putc-functie is de gelijk aan de fputc.
Deze zie je ook vaak gebruikt worden.
Het vereist dezelfde argumenten en het retourtype is hetzelfde.
Het verschil tussen hen is: dat de putc als macro in
de standaardbibliotheek kan worden geïmplementeerd.
Terwijl fputc een functie is.
Niet veel verschillen, maar we hebben niets geleerd over macro's.
Dus we blijven bij fputc voor het schrijven van losse karakters.
En bijvoorbeeld, het is vrij eenvoudig.
Het eerste wat je moet doen zoals altijd is dat u het bestand moet openen.
Daarvoor verklaren we onze variabelen, declareren we een bestandsaanwijzer, moet de
null worden geïnitialiseerd.
En dan ons geheel getal dat we gaan schrijven.
Wanneer we ons bestand openen, zult u merk op dat we een w of een w plus doen.
W betekent dat we gaan alleen schrijven, je kunt niet lezen.
W plus betekent dat je kunt schrijven en lezen.
In dit geval kunnen we schrijven en lezen.
Hier hebben we een for-lus.
We gaan door alle tekens beginnend bij 33 tot 100.
Als dit gehele getallen zijn, wat? dit betekent dat het karakter
wordt weergegeven in de ASCII-tabel.
Dus als je bijvoorbeeld karakter schrijft 59, moet je het opzoeken in de ASCII-tabel om
te zien wat het vertegenwoordigt, maar het zou een echt personage zijn.
Hier zijn we gewoon aan het schrijven ASCII-waarden 33 tot 100,
en we zeggen fputc char fp.
En je zou conversie kunnen gebruiken functies als u
ASCII-waarden en gehele getallen wilt maken, je kunt gewoon een atoi gebruiken.
Dus als je de . zou willen schrijven teken c, je zou fputc atoi kunnen zeggen
en dan c tussen enkele aanhalingstekens kunnen zetten.
Dat zou ook goed zijn omdat het de ASCII naar een geheel
getal zou converteren en het zou schrijven.
Maar het eerste argument is een geheel getal, dus je moet een geheel getal schrijven.
Het tweede argument is ons bestand pointer, vrij eenvoudig daar.
En dan is het laatste wat we moeten doen doen is dat we dat bestand moeten sluiten.
Wij willen waarschijnlijk ook zet de fp-pointer op null.
Maar nogmaals, er is een geheel getal voor nodig.
Dus wees voorzichtig daar.
Het is altijd vertegenwoordigd in de ASCII-tabel.
Maar u kunt de werkelijke karakters twee gehele getallen met atoi.
Hoe zit het met het schrijven van een string?
naar een tekstbestand, veel nuttiger, efficiënter.
Hier gebruik je de fputs-functie.
Dit zal u toelaten om schrijf naar een bestand of stream.
Het is vergelijkbaar met de fgets, het neemt een constante ladingsreeks die u wilt
schrijven als de eerste parameter naar aanwijzer.
En het duurt een, als onze tweede parameter, de bestandsaanwijzer, naar welk
bestand u wilt schrijven.
En dan retourneert het een int.
Dus het eerste argument is onze wijs de tekenreeks aan die
u wilt schrijven.
Het tweede argument is het bestand pointer zelf, en de functie
schrijft karakters uit een string totdat het de nulterminator bereikt.
Het schrijft niet de nul terminator-teken toe aan het bestand, dus
je moet het expliciet schrijven.
Dit kan de zaken bemoeilijken omdat: wanneer u de gegevens
terugleest, kan deze een variabele lengte hebben en het eindigt niet bij de nulterminator.
Dus je moet-- Verwacht dat het
een . schrijft regel tekst met een nieuw regelteken
aan het einde.
Dus zorg dat je bekend bent met de
null-terminator en ofwel expliciet schrijven met fputc, een enkel teken of schrijf het en het zal in feite het nieuwe
regelteken toevoegen aan het einde nadat je het hebt geschreven.
Dus het verwacht dat nieuw lijnkarakter om daar te zijn.
Dat moet je expliciet aangeven.
Dit is vrij eenvoudig op het gebied van codes.
Je zegt gewoon foppen.
Fputs, schrijft een string in de nieuwe regel met behulp van de bestandsaanwijzer.
En dan schrijft een andere fput hier nog een string en dan sluit je hem.
Dus in dit geval schreven we er twee strings, twee regels code eigenlijk of twee regels
in het bestand en we opende het bestand met w plus dat is
voor lezen en schrijven.
De schrijfvoorbeelden zijn: vrij eenvoudig.
Je roept gewoon een paar functies aan, fopen en dan fputs en dan fclose.
Nu voor het schrijven van geformatteerde uitvoer, we gaan fprintf gebruiken.
Nogmaals, dat merk je met de scanf om te lezen en in
te voeren en de printf, je voegt dat gewoon toe fprefix voor de
functie en u schrijft geformatteerde uitvoer.
Dus voor het schrijven van geformatteerde uitvoer met fprintf retourneert het een geheel getal.
Er is een bestandsstroom voor nodig als
de eerste parameter en daarna worden de formaatspecificaties gevolgd door komma's met een variabel
aantal argumenten voor elk formaat specificeerder net als printf echt.
Het eerste argument voor de functie is de aanwijzer naar het bestandsobject.
En dan is het tweede argument: dat variabele aantal argumenten.
Het is een c-tekenreeks die één bevat of
meer van de volgende items, witruimteteken, een niet-witruimte karakter, formaatspecificaties.
En nogmaals, het is erg gelijk aan Printf
Maar je schrijft eigenlijk naar een bestand.
U kunt dus opgemaakt schrijven uitvoer naar een bestand.
Als het succesvol is, keert het terug het aantal geschreven tekens.
Anders gaat het retourneer een negatief getal als
het niet is gelukt.
Het ziet er ongeveer zo uit.
U neemt de standaard IO-header op.
U maakt uw bestandsaanwijzer.
U gebruikt dan uw bestandsaanwijzer om een tekstbestand te openen, gebruik het voor w plus
voor lezen en schrijven en dan zeg je gewoon fprintf.
In dit geval zeggen we fprintf.
We specificeren het bestand pointer en dan specificeren we vier strings
gescheiden door a spatie en dan een procent d.
En we schrijven hallo mijn nummer is 555.
Dus het bestand zal eigenlijk hebben de gegevens die zijn geformatteerd wanneer u deze schrijft.
Laten we dit eens bekijken in codeblokken en kijk hoe het eruit ziet.
Er zit hier dus niet veel code in.
We hebben maar een paar regels code.
Op lijn vier zijn we... het maken van onze bestandsaanwijzer.
En nogmaals, we zullen willen initialiseer dit naar null.
We bellen dan, in lijn zes, fopen.
En we zeggen bestand openen. txt, zodat het dossier. txt moet bestaan en ofwel
waar het c-bronbestand wordt uitgevoerd of als u het programma handmatig
uitvoert waar het uitvoerbare bestand zich ook bevindt.
We gaan open voor lezen en schrijven.
Nadat we het hebben geopend, we willen er zeker van zijn
dat de bestandsaanwijzer niet null is.
Dus we willen zeggen niet fp.
Als het niet nul is, dan hebben we kan beginnen met het schrijven van gegevens.
En in dit geval, op lijn 9, zijn we... geformatteerde gegevens gaan schrijven.
Dus wat we gaan schrijven is we gaan een string schrijven, twee
string drie string, vier string en dan een geheel getal.
En dan zijn de volgende parameters: alleen door komma's gescheiden tekenreeksen
en ons gehele getal aan het einde.
Ik moet deze gewoon dubbel repareren aanhalingstekens omdat het niet goed werkt, dus 555 staat
daar helemaal aan het einde.
En het gaat dan sluiten het bestand en stuur het terug.
Dus laten we doorgaan en proberen te bouwen dit en voer het uit en we zullen geen echte
uitvoer zien om te rennen.
We zullen moeten kijken hoe het bestand eruitziet.
Dus als we dit bestand compileren, u wilt zeker weten dat
uw if-statement niet gelijk is aan null.
Dus als we dit opnieuw doen, je gaat geen output
zien, het gaat gewoon draaien.
En als je dan naar het bestand kijkt in de map, zul je zien
dat het de invoer in een enkele bevat lijn, hallo mijn naam is fpp of op 555.
Dus zo kan je geformatteerde uitvoer schrijven.
Het is vrij eenvoudig.
Je zou nieuwe kunnen toevoegen lijnen als je wilt.
Het zal aan het einde een nieuwe regel toevoegen, maar je zou hier backslash n kunnen plaatsen.
Het werkt net als printf.
Nogmaals, we moeten het uitvoeren, we zie pas echt interessante uitvoer als je
naar het bestand kijkt.
En in dat geval zie je een line feed.
Dus uitvoer naar een bestand schrijven is vrij eenvoudig.
Je wilt karakters schrijven, jij
do fputc, je wilt strings fputs schrijven, geformatteerde output fprintf.
We zullen een aantal uitdagingen hebben die helpen u
hier nog meer vertrouwd mee te raken, maar het is vrij eenvoudig om schrijf uitvoer naar een tekstbestand.
Dank u.