1. 程式人生 > 其它 >【自我學習】文字檔案儲存相關

【自我學習】文字檔案儲存相關

在ADS-B專案中,涉及到文字檔案的儲存,需要將接收的訊號通過文字檔案的形式儲存起來,在這裡涉及到相關函式。

1.fopen()函式

fopen()函式用於檔案的儲存與讀取,函式宣告:

FILE *fopen(const char *filename, const char *mode)

filename – 包含了要開啟的檔名稱
mode --包含了檔案訪問模式,模式如下:

modedescribe
‘r’開啟檔案,讀取檔案
‘w’建立一個用於寫入的空檔案。如果檔名稱與已存在的檔案相同,則會刪除已有檔案的內容,檔案被視為一個新的空檔案。
‘a’追加到一個檔案。寫操作向檔案末尾追加資料。如果檔案不存在,則建立檔案。
‘r+’開啟一個用於更新的檔案,可讀取也可寫入。該檔案必須存在。
‘r+’開啟一個用於更新的檔案,可讀取也可寫入。該檔案必須存在。
‘r+’開啟一個用於更新的檔案,可讀取也可寫入。該檔案必須存在。

用法:

FILE *fp;
fp = fopen(filename,"a");
fprintf(fp, "L ICAO %s latitude %4.4f longitude %4.4f altitude %6.0f \n",Aircraft_ID,lat,lon,alt);
fclose(fp);

2.時間讀取

為了方便文字文件的儲存,可以利用#include <time.h>函式庫,根據系統時間對文字進行命名。

time_t t;//time_t 這種型別就是用來儲存從1970年到現在經過了多少秒
struct tm * lt;
time (&t);//獲取Unix時間戳。
lt = localtime (&t);//轉為時間結構。

tm結構體詳解

struct tm 
{  
int tm_sec;		 /* 秒–取值區間為[0,59] */   
int tm_min; 		 /* 分 - 取值區間為[0,59] */   
int tm_hour; 	         /* 時 - 取值區間為[0,23] */   
int tm_mday;		 /* 一個月中的日期 - 取值區間為[1,31] */  
int
tm_mon; /* 月份(從一月開始,0代表一月) - 取值區間為[0,11] */ int tm_year; /* 年份,其值從1900開始 */   int tm_wday; /* 星期–取值區間為[0,6],其中0代表星期天,1代表星期一,以此類推 */   int tm_yday; /* 從每年的1月1日開始的天數–取值區間為[0,365],其中0代表1月1日,1代表1月2日,以此類推 */   int tm_isdst; /* 夏令時識別符號,實行夏令時的時候,tm_isdst為正。不實行夏令時的進候,tm_isdst為0;不瞭解情況時,tm_isdst()為負。*/   long int tm_gmtoff; /*指定了日期變更線東面時區中UTC東部時區正秒數或UTC西部時區的負秒數*/    const char *tm_zone; /*當前時區的名字(與環境變數TZ有關)*/  

使用結構體中的年月日時分作為文字文件命名。

3.sprintf()函式

sprintf()函式傳送格式化輸出到 str 所指向的字串,函式宣告:

int sprintf(char *str, const char *format, ...)

與printf類似:
str – 這是指向一個字元陣列的指標,該陣列儲存了 C 字串。
format – 這是字串,包含了要被寫入到字串 str 的文字。它可以包含嵌入的 format 標籤,format 標籤可被隨後的附加引數中指定的值替換,並按需求進行格式化

使用:

 char filename[64];
 sprintf(filename,"%d_%d_%d_%d_%d.txt",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min);

定義文件名,由tm結構體中得到的年月日命名文件,再使用fopen()函式即可完成儲存工作。

4.程式碼

	#include<stdio.h>
	#include<time.h>
	int main()
	{
	FILE *fp;
	time_t t;
    struct tm * lt;
    char filename[64];
    time (&t);//獲取Unix時間戳。
    lt = localtime (&t);//轉為時間結構。
    sprintf(filename,"%d_%d_%d_%d_%d.txt",lt->tm_year+1900, lt->tm_mon+1, lt->tm_mday, lt->tm_hour, lt->tm_min);
    fp = fopen(filename,'a');
	fprintf(fp, "test %d\n",tm_sec);
	fclose(fp);
    }

致謝:

https://www.runoob.com/cprogramming/c-function-fopen.html
https://www.runoob.com/cprogramming/c-function-sprintf.html
https://blog.csdn.net/csghydiaoke/article/details/8435010
https://blog.csdn.net/qq_36754364/article/details/108873801