当前位置:网站首页>Document operation II (5000 word summary)
Document operation II (5000 word summary)
2022-04-23 16:57:00 【Populus euphratica under the desert】
Personal home page : Welcome to ——> Populus euphratica under the desert
Ladies and gentlemen , It's beautiful
If you think the article is helpful to you
You can support bloggers with one key and three links
Your every care is the driving force of my persistence
![]()
: This issue focuses on : Explanation of knowledge related to document operation
The first part mainly talks about the sequential reading and writing of documents , Little friends who don't understand this point ——》 file 1
I hope everyone can study and work happily every day .
Let's move on to today's study :
So how to read and write files randomly ?
So how to calculate the offset ?
How to make the file pointer point to the starting position ?
The difference between binary files and text files
Judgment of the end of file reading
Whether there is the concept of buffer :
printf and fprintf function sprintf
So how to read and write files randomly ?
Make the same fseek Function for random reading and writing , Let's look at the function prototype for analysis :
First , The first function parameter is the file stream , Nothing to say.
The second parameter is the offset , The offset has a relative position , Offset from file pointer position .
The third parameter is the file pointer position , There are three states
SEEK_CUR
The current location of the file pointer
SEEK_END
End of file pointer
SEEK_SET
File pointer start position
in summary : We have to read and write randomly , It's at the position of the file pointer , Adding the offset can realize the random reading and writing of the file .
example :
int main() { FILE *p = fopen(" Populus euphratica .dat", "wb"); if (p == NULL) { perror("main:"); exit(-1); } fputs("Happy life", p); fseek(p, 6, SEEK_SET); fputs("every day", p); fclose(p); return 0; }
First write “Happy life”, Then we start at the beginning of the file pointer , The offset for the 6, To write , It will cover “Happy ” After that , It becomes "Happy every day".
Random reading of files :
int main() { FILE *p = fopen(" Populus euphratica .dat", "rb"); if (p == NULL) { perror("main:"); exit(-1); } char a[10] = { 0 }; fseek(p, 4, SEEK_SET); fgets(a, 10, p); fclose(p); return 0; }
First, the file pointer is the starting position of the file , The offset for the 4, So, from ’y‘ Characters begin to read , Read back 9 Characters , because fgets Finally, I will read a '\0'.
So how to calculate the offset ?
We use it ftell Function to confirm the offset of the current position from the starting position .
The function prototype is
Just pass in the file pointer of the current location .
Look at an example :
int main() { FILE *p = fopen(" Populus euphratica .dat", "rb"); if (p == NULL) { perror("main:"); exit(-1); } fseek(p, -3, SEEK_END); printf("%c",fgetc(p)); int a = ftell(p); printf("\n%d\n", a); fclose(p); return 0; }
Under the analysis of : First, we find the end of the file pointer , Then the offset is -3 , Is to offset forward from the end of the file 3 Characters , Then read is d('a' 'y' ’\0‘), At this time, the file pointer is located at 'a' It's about , The distance from the start of the file is 13 The offset .
How to make the file pointer point to the starting position ?
We can use rewind function To achieve
int main() { FILE *p = fopen(" Populus euphratica .dat", "rb"); if (p == NULL) { perror("main:"); exit(-1); } fseek(p, -3, SEEK_END); printf("%c",fgetc(p)); int a = ftell(p); printf("\n%d\n", a); rewind(p); a = ftell(p); printf("%d\n", a); fclose(p); return 0; }
Use rewind Then the offset of the file is 0 La .
The difference between binary files and text files
According to the organization of data , Data files are called text file perhaps Binary .Data is stored in memory in binary form , If the output without conversion is to external memory , Binary files . .
With ASCII A file stored in the form of characters is a text file .All characters are written in ASCII stored , Numerical data can be used either ASCII stored , It can also be stored in binary form .Let's take an example to understand :int main() { int a = 10000; FILE* pf = fopen(" Under the tree .txt", "wb"); fwrite(&a, 4, 1, pf); fclose(pf); pf = NULL; return 0; }We put 10000 Write to the file in binary , Let's have a look , First use Text form Call and have a look .
We can't understand this , So we're going to Binary call See if you can understand .
We don't seem to understand the two-level system , So let's see 10000 stay How to store... In memory . .
We found that what is stored in memory seems to be the same as what is stored in binary . And it takes up 4 Bytes . We know that the display in text form is 10000 yes 5 Characters , That is to say 5 Bytes , In memory and binary, it is 4 Bytes .
Judgment of the end of file reading
Keep in mind : During file reading , Out-of-service feof The return value of the function is directly used to determine whether the end of the file .It is Apply when the file reading is finished , The judgment is that the read failed and ended , Or end of file .1. Whether the reading of text file is finished , Determine whether the return value is EOF ( fgetc ), perhaps NULL ( fgets )for example :fgetc Judge whether it is EOF .fgets Determine whether the return value is NULL .2. Judgment of reading end of binary file , Judge whether the return value is less than the actual number to be read .for example :fread Judge whether the return value is less than the actual number to be read .About fread Put... Under the description :![]()
The return value is the number of reads , Parameters 1 It's a storage space , Parameters 2 Is to read each size , Parameters 3 Is the number to read , Parameters 4 Is a file stream . If The number of actual reads is less than the number to be read , Then it means that the file reading is over .
Whether there is the concept of buffer :
ANSIC The standard is “ Buffer file system ” Processing of data files , The so-called buffered file system means that the system automatically creates files for programs in memory Open up a block for each file in use “ File buffer ” . Data output from memory to disk is first sent to a buffer in memory , loading When the buffer is full, it is sent to the disk together . If you read data from disk to computer , Then read the data from the disk file and input it into memory Impact area ( Fill the buffer ), And then send the data from the buffer to the program data area one by one ( Program variables, etc ). The size of the buffer According to the C The compiler system decides .Let's take a look at an example to prove ://VS2013 WIN10 Environmental testing int main() { FILE*pf = fopen(" Under Populus euphratica .txt", "w"); fputs("qwertyuiop", pf);// Put the code in the output buffer first printf(" sleep 20 second - The data has been written , Open under the Populus euphratica .txt file , Found no content in the file \n"); Sleep(20000); printf(" Refresh buffer \n"); fflush(pf);// When the buffer is flushed , Write the data in the output buffer to a file ( disk ) // notes :fflush In high version VS It can't be used on printf(" Sleep again 10 second - here , Open the poplar tree again .txt file , There's something in the file \n"); Sleep(10000); fclose(pf); // notes :fclose When closing a file , It also flushes the buffer pf = NULL; return 0; }
![]()
scanf and fscanf and sscanf
Let's compare scanf and fsacnf and sscanf function![]()
![]()
![]()
These are the similarities between the three functions ,scanf It's called formatted input ,fscanf Is a formatted input function for all input streams ,sscanf Is to convert a string into formatted data .
printf and fprintf function sprintf
Look at the function prototype
![]()
![]()
printf Is the format output function ,fprintf Is a formatted output function for all output streams ,sprintf Is to convert a formatted data into a string .
fprintf and fscanf example
typedef struct stu { int age; char name[20]; double wight; }stu; int main() { stu s1 = { 18," Under Populus euphratica ",66.6 }; FILE *p = fopen(" Under Populus euphratica .abc", "w"); if (NULL == p) { perror("fopen:"); exit(-1); } fprintf(p, "%d %s %lf", s1.age, s1.name, s1.wight); fclose(p); return 0; }
We wrote , Now read out .
int main() { stu s2 = { 0 }; FILE *p = fopen(" Under Populus euphratica .abc", "r"); if (NULL == p) { perror("fopen:"); exit(-1); } fscanf(p, "%d %s %lf", &s2.age, s2.name, &s2.wight); printf("%d %s %lf", s2.age, s2.name, s2.wight); fclose(p); return 0; }
sscanf and sprint example :
typedef struct stu { int age; char name[20]; double wight; }stu; int main() { char arr[256] = { 0 }; stu s3 = { 18, " Under Populus euphratica ", 66.6 }; stu tmp = { 0 }; sprintf(arr, "%d %s %lf", s3.age, s3.name, s3.wight); printf(" Print arr Content :%s\n", arr); sscanf(arr, "%d %s %lf", &tmp.age, tmp.name, &tmp.wight); printf(" Print tmp Content :%d %s %lf\n", tmp.age, tmp.name, tmp.wight); return 0; }
Here, we first convert and formatted data into string output , Then convert the string into formatted data for output .
版权声明
本文为[Populus euphratica under the desert]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204231654308713.html
边栏推荐
- Modify the test case name generated by DDT
- The new MySQL table has a self increasing ID of 20 bits. The reason is
- Idea of batch manufacturing test data, with source code
- Public variables of robotframework
- 聊一聊浏览器缓存控制
- Read a blog, re understand closures and tidy up
- Detailed explanation of the penetration of network security in the shooting range
- Calculate pie chart percentage
- 众昂矿业:萤石浮选工艺
- Production environment——
猜你喜欢

计组 | 【七 输入/输出系统】知识点与例题

Loggie source code analysis source file module backbone analysis

【PIMF】OpenHarmony啃论文俱乐部—在ACM Survey闲逛是什么体验

Feign report 400 processing

Pytorch: the pit between train mode and eval mode

DDT + Excel for interface test

RTKLIB 2.4.3源码笔记

Easyexcel reads the geographical location data in the excel table and sorts them according to Chinese pinyin

Shell脚本——Shell编程规范及变量

自定义my_strcpy与库strcpy【模拟实现字符串相关函数】
随机推荐
∑GL-透视投影矩阵的推导
JMeter installation tutorial and solutions to the problems I encountered
Query the data from 2013 to 2021, and only query the data from 2020. The solution to this problem is carried out
详解牛客----手套
Sub database and sub table & shardingsphere
Real time operation of vim editor
Paging the list collection
org. apache. parquet. schema. InvalidSchemaException: A group type can not be empty. Parquet does not su
How to choose the wireless gooseneck anchor microphone and handheld microphone scheme
websocket
PHP高效读大文件处理数据
SQL database
众昂矿业:萤石浮选工艺
Smart doc + Torna generate interface document
Website_ Collection
On the security of key passing and digital signature
Installation and management procedures
正则过滤内网地址和网段
Custom implementation of Baidu image recognition (instead of aipocr)
Collect blog posts
















