欢迎来到朵拉利品网
知识中心
资讯
  • 资讯
  • 产品
  • 供应商
您的位置: 朵拉利品网 >  知识中心 > c++读取txt文件 C读取txt文件问题
c++读取txt文件 C读取txt文件问题
2019-07-24 20:21:34 来源:朵拉利品网

1, C读取txt文件问题



1.fopen的函数原型:FILE * fopen(const char * path,const char * mode);
fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读数据。
rw+ 读写打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
wt+ 读写打开或着建立一个文本文件;允许读写。
at+ 读写打开一个文本文件,允许读或在文本末追加数据。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
2.例程:
#include
#define F_PATH "d:\myfile\file.dat"
char c;
int main(){
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");
if(NULL==fp) return -1;//要返回错误代码
while(fscanf(fp,"%c",&c)!=EOF) printf("%c",c); //从文本中读入并在控制台打印出来
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址
return 0;
}

4, C语言如何读取txt文本里面的内容?



在C语言中,文件操作都是由库函数来完成的。
要读取一个txt文件,首先要使用文件打开函数fopen()。
fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。
其次,使用文件读写函数读取文件。
在C语言中提供了多种文件读写的函数:
·字符读写函数 :fgetc和fputc
·字符串读写函数:fgets和fputs
·数据块读写函数:freed和fwrite
·格式化读写函数:fscanf和fprinf
最后,在文件读取结束要使用文件关闭函数fclose()关闭文件。
下面以格式化读写函数fscanf和fprintf为例,实现对文件A.txt(各项信息以空格分割)的读取,并将它的信息以新的格式(用制表符分割各项信息)写入B.txt,实现对A.txt的处理。
C语言源程序如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef struct student{
char name[32];
int no;
char sex[16];
float score;
} stu;
int main(int argc, char* argv[])
{
//打开文件
FILE * r=fopen("A.txt","r");
assert(r!=NULL);
FILE * w=fopen("B.txt","w");
assert(w!=NULL);
//读写文件
stu a[128];
int i=0;
while(fscanf(r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)!=EOF)
{
printf("%s %d %s %g ",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到显示器屏幕
fprintf(w,"%s %d %s %g ",a[i].name,a[i].no,a[i].sex,a[i].score);//输出到文件B.txt
i++;
}
//关闭文件
fclose(r);
fclose(w);
system("pause");
return 0;
}编译运行后的结果如下:

//下面是写数据,将数字0~9写入到data.txt文件中
FILE *fpWrite=fopen("data.txt","w");
if(fpWrite==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
fprintf(fpWrite,"%d ",i);
fclose(fpWrite);
//下面是读数据,将读到的数据存到数组a[10]中,并且打印到控制台上
int a[10]={0};
FILE *fpRead=fopen("data.txt","r");
if(fpRead==NULL)
{
return 0;
}
for(int i=0;i<10;i++)
{
fscanf(fpRead,"%d ",&a[i]);
printf("%d ",a[i]);
}
getchar();//等待

8, 怎样用C#读取TXT文件内容并修改



class Program
{
public static void Main(string[] args)
{
string filePath = "c:\test.txt";
List list = ReadInfoFromFile(filePath); //这个函数把文件的每一行读入list
foreach (string[] strArray in list)
{
if (strArray.Length < 7)
{
continue;
}
for (int i = 0; i < strArray.Length; i++)
{
if (i == 2 || i == 3)
{
strArray[i] = ""; //把想要去掉的地方换成空串
}
}
}
WriteInfoTofile(filePath, list);
}
///
/// 这个函数把文件的每一行读入list
///
///
///
private static List ReadInfoFromFile(string filePath)
{
if (File.Exists(filePath))
{
List list = new List();
// 打开文件时 一定要注意编码 也许你的那个文件并不是GBK编码的
using (StreamReader sr = new StreamReader(filePath, Encoding.GetEncoding("GBK")))
{
while (!sr.EndOfStream) //读到结尾退出
{
string temp = sr.ReadLine();
//将每一行拆分,分隔符就是char 数组中的字符
string[] strArray = temp.Split(new char[] { " ", " ", "," }, StringSplitOptions.RemoveEmptyEntries);
//将拆分好的string[] 存入list
list.Add(strArray);
}
}
return list;
}
return null;
}
///
/// 这个函数把list中的每一行写入文件
///
///
///
private static void WriteInfoTofile(string filePath, List list)
{
// 打开文件时 一定要注意编码 也许你的那个文件并不是GBK编码的
using (StreamWriter sw = new StreamWriter(filePath, false, Encoding.GetEncoding("GBK")))
{
//一个string[] 是一行 ,一行中以tab键分隔
foreach (string[] strArray in list)
{
string line = string.Empty;
foreach (string temp in strArray)
{
if (!string.IsNullOrEmpty(temp))
{
line += temp;
line += " ";
}
}
sw.WriteLine(line);
}
}
}
}

相关概念


string

string是一个英语单词,可以用作名词和及物动词,可以翻译为绳子、带子,等等。

list

list是一个计算机专业术语,在编程语言中List 是类库中的一个类,可以简单视之为双向连结串行,以线性列的方式管理物件集合。list 的特色是在集合的任何位置增加或删除元素都很快,但是不支持随机存取。list 是类库提供的众多容器(container)之一,除此之外还有vector、set、map、…等等。list 以模板方式实现(即泛型),可以处理任意型别的变量,包括使用者自定义的资料型态