新聞中心
在實(shí)際開發(fā)中,數(shù)據(jù)庫的使用是不可避免的,但是對于小型項(xiàng)目或者個人開發(fā)而言,使用大型數(shù)據(jù)庫管理系統(tǒng)可能會顯得過于笨重,因此我們可以選擇使用文本文件作為數(shù)據(jù)庫,通過使用 C 語言從文本文件中讀取數(shù)據(jù),來實(shí)現(xiàn)基本的數(shù)據(jù)管理。

在本文中,我們將詳細(xì)介紹如何使用 C 語言從文本文件中讀取數(shù)據(jù)庫,并為您提供一些基本的實(shí)現(xiàn)方法和代碼示例。
1. 設(shè)置數(shù)據(jù)庫結(jié)構(gòu)體
在處理文本文件時,更好的數(shù)據(jù)存儲方式是將數(shù)據(jù)存儲在結(jié)構(gòu)體中。對于每個存儲的實(shí)體,您需要定義一個相應(yīng)的結(jié)構(gòu)體,并在開始讀取數(shù)據(jù)之前對其進(jìn)行初始化。
typedef struct{
char name[80];
char phone[15];
int age;
} UserData;
UserData data;
當(dāng)您定義了一個適當(dāng)?shù)慕Y(jié)構(gòu)體后,我們就可以開始讀取數(shù)據(jù)了。
2. 打開文件
文件處理是 C 語言中最基礎(chǔ)且最重要的部分之一。在處理文本文件時,您需要使用 C 語言標(biāo)準(zhǔn)庫中的 fopen() 函數(shù)來打開文件。
當(dāng)您需要從一個文件中讀取數(shù)據(jù)時,請使用 “r” 或 “rt” 標(biāo)志打開文件:
FILE *database;
database = fopen(“database.txt”, “r”);
3. 從文件中讀取數(shù)據(jù)
當(dāng)您已經(jīng)打開了數(shù)據(jù)庫文件之后,您需要從中讀取數(shù)據(jù)。通過使用 fgets() 函數(shù),您可以輕松地從文件中讀取一條數(shù)據(jù)。
char temp[1024];
fgets(temp, 1024, database);
讀取文件的另一個常用函數(shù)是 fscanf()。這一函數(shù)允許您從文件中讀取格式化數(shù)據(jù)。
fscanf(database, “%s %s %d”, data.name, data.phone, &data.age);
4. 關(guān)閉文件
在您完成了文件操作之后,請務(wù)必關(guān)閉文件。通過使用 fclose() 函數(shù),可以確保所有的數(shù)據(jù)都已經(jīng)保存到了文件中,同時也確保了程序的正常執(zhí)行。
fclose(database);
5. 完整的代碼實(shí)現(xiàn)
接下來,我們將使用完整的代碼實(shí)現(xiàn)從文本文件中讀取數(shù)據(jù)庫的功能。
#include
#include
#include
typedef struct{
char name[80];
char phone[15];
int age;
} UserData;
void read_database(){
FILE* database = fopen(“database.txt”, “rt”);
if (database == NULL){
printf(“Error opening database\n”);
return;
}
UserData data;
char buffer[1024];
while (fgets(buffer, 1024, database) != NULL){
sscanf(buffer, “%s %s %d”, data.name, data.phone, &data.age);
printf(“%s %s %d\n”, data.name, data.phone, data.age);
}
fclose(database);
return;
}
int mn(){
read_database();
return 0;
}
在這個示例代碼中,我們首先使用打開文件的方式打開了名為 “database.txt” 的數(shù)據(jù)庫文件,接下來定義 UserData 結(jié)構(gòu)體,用于存儲從文本文件中讀取的數(shù)據(jù)。
通過使用 while 循環(huán),我們讀取了文件中的每一行數(shù)據(jù),同時通過使用 sscanf 函數(shù)和 sscanf 函數(shù)從行中提取了特定的數(shù)據(jù)。我們關(guān)閉了數(shù)據(jù)庫文件,并返回程序的執(zhí)行結(jié)果。
相關(guān)問題拓展閱讀:
- C語言如何讀取文本文件中的一行數(shù)據(jù)???
- c#如何讀取規(guī)定格式的TXT文件,并存入數(shù)據(jù)庫
C語言如何讀取文本文件中的一行數(shù)據(jù)???
char *fgets(char *buf, int bufsize, FILE *stream);參數(shù) *buf: 字符型指針,指向用來存儲所得數(shù)據(jù)的地址。bufsize: 整型數(shù)據(jù),指明存儲數(shù)據(jù)的大小。*stream: 文件結(jié)構(gòu)體指針,將要讀取的文件流。返回值
成功,則返回之一個參數(shù)buf;
在讀字符時遇到end-of-file,則eof指鏈擾示器被設(shè)置,如果還沒讀入任何字團(tuán)此符就遇到這種情況,則buf保持原來的內(nèi)容,返棚或旦回NULL;
如果發(fā)生讀入錯誤,error指示器被設(shè)置,返回NULL,buf的值可能被改變。
c#如何讀取規(guī)定格式的TXT文件,并存入數(shù)據(jù)庫
讀取txt文件并存儲很好實(shí)現(xiàn)
但是你這種格式,讀的時候太麻煩
你用這種格式存儲在txt文件里,那就簡單的多了
2023/12/7 06:35 電視劇 家有兒女(之一部)
2023/12/7 07:00 江蘇新時空
2023/12/7 07:20 人間精選
2023/12/7 07:50 媳婦的眼淚(33)
注意他們之間有空格。
當(dāng)然你那種格式當(dāng)然也能實(shí)現(xiàn)。知識麻煩了許多
這是我以前族猛寫過的類或激似代碼,你試驗(yàn)下行不行吧
FileStream afile = new FileStream(“路徑”, FileMode.OpenOrCreate);
StreamReader sr = new StreamReader(afile,Encoding.Default);
string str = sr.ReadLine();
string strarr;
string stime;
string enu;
while (str!=null)
{
strarr = str.Split(‘,’);
stime=strarr;
enu=strarr;
sqlhelper.insert(stime,enu);//這是數(shù)據(jù)存儲的部分
str = sr.ReadLine();
}
sr.Close();
另外可能不止這一種方法,譬如先將數(shù)據(jù)全部讀到內(nèi)兆團(tuán)橋存,然后在執(zhí)行存儲。
這個很簡單啊 你以一行的形式讀取 然后 拿到這行以后 判斷這行的格式是否有日期 如果有的話 那麼就是 2023/12/7 否則就是洞明神 06:35 電視劇 家有兒女(之一部)
如果你要源碼的話我可以現(xiàn)在給你寫 有問題HI我 !!
//得到節(jié)目TXT
StreamReader sr = new StreamReader(“D:\\jiangsu.txt”, Encoding.GetEncoding(“GBK”));
//讀取到末尾
string txt = sr.ReadToEnd();
//電視臺
string dianshitai = string.Empty;
//判斷是否為空文本
if (!txt.Equals(string.Empty))
{
//分割納虧文本
string oldString = txt.Replace(“\r\n”, “@”).Split(‘@’);
//循環(huán)數(shù)組
foreach (string newTxt in oldString)
{
//是否日期
if (newTxt.IndexOf(“/”) > 0)
{
//得到日期
}
/槐皮/是否節(jié)目
else if (newTxt.IndexOf(“:”))
{
//得到節(jié)目
}
//電視臺
else
{
//得到電視臺
dianshitai = newTxt;
}
}
//再怎麼操作數(shù)據(jù)庫不用教了吧?
方法一:
private string connStr = ConfigurationManager.ConnectionStrings.ConnectionString;
///
/// 用insert方法從文本文件中批量導(dǎo)入到數(shù)據(jù)庫表中
///
///
///
private void btnInsert_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = “文本文檔|*.txt”;
//如果用戶沒有選擇文件并確盯弊祥定則直接返回
if (ofd.ShowDialog() != true)
{
return;
}
//獲得文件名包括路徑
string fileName = ofd.FileName;
try
{
//定義一個開始卜答時間
DateTime startTime = DateTime.Now;
//因?yàn)槲募容^大,所有使用StreamReader的效率要比使用File.ReadLines高
using (StreamReader sr = new StreamReader(fileName, Encoding.Default))
{
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
using (SqlCommand cmd = conn.CreateCommand())
{
while (!sr.EndOfStream)
{
string readStr = sr.ReadLine();//讀取一行數(shù)據(jù)
if (readStr.StartsWith(“1”))//去掉標(biāo)題行
{
string strs = readStr.Split(new char { ‘\t’, ‘”‘ }, StringSplitOptions.RemoveEmptyEntries);//將讀取的字符串按凱搏”制表符/t“和””“分割成數(shù)組
string startNum = strs;
string numArea = strs;
string numType = strs;
cmd.CommandText = “insert into T_PhoneInfo(FStartNum,FNumArea,FNumType) values(@startNum,@numArea,@numType)”;
cmd.Parameters.Clear();//清除上一次的參數(shù)
cmd.Parameters.Add(new SqlParameter(“@startNum”, startNum));
cmd.Parameters.Add(new SqlParameter(“@numArea”, numArea));
cmd.Parameters.Add(new SqlParameter(“@numType”, numType));
cmd.ExecuteNonQuery();
}
}
}
}
}
//結(jié)束時間-開始時間=總共花費(fèi)的時間
TimeSpan ts = DateTime.Now – startTime;
MessageBox.Show(“導(dǎo)入數(shù)據(jù)成功!共花費(fèi)時間:” + ts.ToString());
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
方法二:
private void btnSqlBulkCopy_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = “文本文檔|*.txt”;
//如果用戶沒有選擇文件并確定則直接返回
if (ofd.ShowDialog() != true)
{
return;
}
//獲得文件名包括路徑
string fileName = ofd.FileName;
try
{
//定義一個開始時間
DateTime startTime = DateTime.Now;
//創(chuàng)建內(nèi)存臨時數(shù)據(jù)表來存儲從文本文件中讀取出來的數(shù)據(jù)
using (DataTable table = new DataTable())
{
//為數(shù)據(jù)表創(chuàng)建相對應(yīng)的數(shù)據(jù)列
table.Columns.Add(“startNum”);
table.Columns.Add(“numArea”);
table.Columns.Add(“numType”);
//因?yàn)槲募容^大,所有使用StreamReader的效率要比使用File.ReadLines高
using (StreamReader sr = new StreamReader(fileName, Encoding.Default))
{
while (!sr.EndOfStream)
{
DataRow dr = table.NewRow();//創(chuàng)建數(shù)據(jù)行
string readStr = sr.ReadLine();//讀取一行數(shù)據(jù)
if (readStr.StartsWith(“1”))//去掉標(biāo)題行
{
string strs = readStr.Split(new char { ‘\t’, ‘”‘ }, StringSplitOptions.RemoveEmptyEntries);//將讀取的字符串按”制表符/t“和””“分割成數(shù)組
string startNum = strs;
string numArea = strs;
string numType = strs;
//往對應(yīng)的 行中添加數(shù)據(jù)
dr = startNum;
dr = numArea;
dr = numType;
table.Rows.Add(dr);//將創(chuàng)建的數(shù)據(jù)行添加到table中
}
}
}
SqlBulkCopy bulkCopy = new SqlBulkCopy(connStr);
bulkCopy.DestinationTableName = “T_PhoneInfo”;//設(shè)置數(shù)據(jù)庫中對象的表名
//設(shè)置數(shù)據(jù)表table和數(shù)據(jù)庫中表的列對應(yīng)關(guān)系
bulkCopy.ColumnMappings.Add(“startNum”, “FStartNum”);
bulkCopy.ColumnMappings.Add(“numArea”, “FNumArea”);
bulkCopy.ColumnMappings.Add(“numType”, “FNumType”);
bulkCopy.WriteToServer(table);//將數(shù)據(jù)表table復(fù)制到數(shù)據(jù)庫中
TimeSpan ts = DateTime.Now – startTime;
MessageBox.Show(“共導(dǎo)入” +table.Rows.Count+ “條數(shù)據(jù),總共花費(fèi)時間:” + ts.ToString());
}
}
catch (IOException ex)
{
MessageBox.Show(ex.Message);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
引用自:
private void button1_Click(object sender, EventArgs e)
{
con.Open();//con為你的SqlConnection對象
StreamReader sr = new StreamReader(new FileStream(“a.txt”, FileMode.Open));
while (!sr.EndOfStream)
{
string data = sr.ReadLine().Replace(” “缺數(shù), “”);//除去該行數(shù)據(jù)中的空格
string insertStr = “insert into t1(ziduan)values(‘者扮友” + data.Substring(0, 1) + “‘)”;
SqlCommand insert = new SqlCommand(insertStr, con);
insert.ExecuteNonQuery();
insertStr = “insert into t2(ziduan)values(‘” + data.Substring(1, 1) + “‘)”;
insert = new SqlCommand(insertStr, con);
insert.ExecuteNonQuery();
insertStr = “insert into t3(ziduan)values(‘” + data.Substring(2, 1) + “‘)”;
insert = new SqlCommand(insertStr, con);
insert.ExecuteNonQuery();
}
sr.Close();
con.Close();
MessageBox.Show(“插入數(shù)據(jù)已完成!”);
}
注意要加上這兩個命首槐名空間:
using System.IO;
using System.Data.SqlClient;
c 從文本文件中讀取數(shù)據(jù)庫的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于c 從文本文件中讀取數(shù)據(jù)庫,使用 C 語言從文本文件中讀取數(shù)據(jù)庫的實(shí)現(xiàn)方法,C語言如何讀取文本文件中的一行數(shù)據(jù)???,c#如何讀取規(guī)定格式的TXT文件,并存入數(shù)據(jù)庫的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務(wù)、應(yīng)用軟件開發(fā)、網(wǎng)站建設(shè)推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎(chǔ)服務(wù)!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價(jià)格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。創(chuàng)新互聯(lián)成都老牌IDC服務(wù)商,專注四川成都IDC機(jī)房服務(wù)器托管/機(jī)柜租用。為您精選優(yōu)質(zhì)idc數(shù)據(jù)中心機(jī)房租用、服務(wù)器托管、機(jī)柜租賃、大帶寬租用,可選線路電信、移動、聯(lián)通等。
新聞標(biāo)題:使用C語言從文本文件中讀取數(shù)據(jù)庫的實(shí)現(xiàn)方法(c從文本文件中讀取數(shù)據(jù)庫)
文章來源:http://www.fisionsoft.com.cn/article/dhephij.html


咨詢
建站咨詢
