文本文件的读写操作

C语言

Python

教程1

Cpp

方法一:

  1. 头文件fstreamifstreamofstream
  2. fstresm包含剩余两个文件、ifstream文件写入操作、ofstream文件读取操作

方法二:采用文件指针进行文本文件读写

  1. 建立文件指针:FILE* fid = fopen("filepath","rb等读写操作");
  2. 判断文件是否被读入
if (fid==NULL){ cerr<<"Failed opening file."<<endl; exit(-1);}
  1. 开辟内存存放数据(以LAS数据结构体为例,使用malloc函数)
//建立结构体
struct LAS_DATA_A
{
	double X;
	double Y;
	double Z;
	int R;
	int G;
	int B;
	double RH;
};
//主函数中开始分配内存
LAS_DATA_A *las_data_a = (LAS_DATA_A*)malloc(sizeof(LAS_DATA_A)*Row_NUM);
//结构体名 * 对象名 = (结构体名*)malloc(单个结构体大小*总体数量);

在完成内存分配之后,只需要将结构体数组指针当做数组使用即可,即las_data_a[1].X = ...

  1. 根据文件结构进行读写,以文本LAS数据为例
    将数据存放于结构体之中,同时增加进度输出
    注意!!!输出函数将会极大影响程序运行速度!在输出时应增加判断以减少输出
// 123(x) 234(y) 345(z) 110(R) 220 (G) 255(B) 0(RH)  分别以空格进行间隔
	for (int i = 0; i < Row_NUM; i++)
	{
		fscanf(fid, "%lf %lf %lf %d %d %d %lf", &las_data_a[i].X, &las_data_a[i].Y, &las_data_a[i].Z, &las_data_a[i].R, &las_data_a[i].G, &las_data_a[i].B, &las_data_a[i].RH);
		if (i % 100000 == 0)
			printf("\b\b\b\b\b\b\b\b\b\b%3.5f%% ", (double)i * 100 / Row_NUM);
	}
  1. 验证文件是否读完(采用fgetc()函数进行验证)
if(fgetc(fid)==EOF)
{
	print("Read Finished\n");	//文本已经读到文本最后
}

C#

文件的读取

StreamReader

1. 使用前置命名空间using System.textusing System.IO
2. 对象的建立:

方法一:

  • 首先应创建FileStream对象FileStream fs = new FileStream(@"c:\test.txt", FileMode.Open);
  • StreamReader sr = new StreamReader(fs);
    方法二:
  • 同SteamWriter一样,StreamReader类可以直接在包含具体文件路径的字符串中创建:
  • StreamReader sr = new StreamReader("test.txt");
3. 常用属性方法:
属性或方法作用
Encoding CurrentEncoding只读属性,获取当前流中使用的编码方式
bool EndOfStream只读属性,获取当前的流位置是否在流结尾
void Close()关闭流
int Peek()获取流中的下一个字符的整数,如果没有获取到字符, 则返回 -1
int Read()获取流中的下一个字符的整数
int Read(char[] buffer, int index, int count)从指定的索引位置开始将来自当前流的指定的最多字符读到缓冲区
string ReadLine()从当前流中读取一行字符并将数据作为字符串返回
string ReadToEnd()读取来自流的当前位置到结尾的所有字符

举例:

 class Program
    {
        static void Main(string[] args)
        {
            FileStream fs = new FileStream(@"c:\1.txt", FileMode.Open);
            StreamReader sr = new StreamReader(fs);//用FileStream对象实例化一个StreamReader对象
            while(sr.Peek()!=-1)//判断文件中是否有字符
            {
                string str = sr.ReadLine();//读取文件中的一行字符
                Console.WriteLine(str);
            }
            sr.Close
        }
    }

分隔文件的读取

读取使用逗号分隔的文件,string类提供了一种称为Split()的方法,可以用于将字符串按照提供的分隔符分隔成字符组

String.Split方法提供的重载函数

名称说明
String.Split (Char[])返回包含此实例中的子字符串(由指定 Char 数组的元素分隔)的 String 数组。
String.Split (Char[], Int32)返回包含此实例中的子字符串(由指定 Char 数组的元素分隔)的 String 数组。参数指定返回的子字符串的最大数量。
String.Split (Char[], StringSplitOptions)返回包含此字符串中的子字符串(由指定的Char 数组的元素分隔)的 String 数组。参数指定是否返回空数组元素。
String.Split (String[], StringSplitOptions)返回包含此字符串中的子字符串(由指定的String 数组的元素分隔)的 String 数组。参数指定是否返回空数组元素。
String.Split (Char[], Int32, StringSplitOptions)返回包含此字符串中的子字符串(由指定的 Char 数组的元素分隔)的 String 数组。参数指定要返回子字符串的最大数量,以及是否要返回空数组元素。
String.Split (String[], Int32, StringSplitOptions)返回包含此字符串中的子字符串(由指定的 String 数组的元素分隔)的 String 数组。参数指定要返回子字符串的最大数量,以及是否要返回空数组元素。
  • StringSplitOptions是拆分的选项,StringSplitOptions.None表示如果在拆分时遇到空字符也拆分出一个元素。StringSplitOptions.RemoveEmptyEntries表示在拆分时不需要白喊空字符串。
例1:
###数据拆分使用举例,将一字符串以逗号为界线拆分为小字符串。
class Program
    {
        static void Main(string[] args)
        {
            string str = "100,20,30,40";
            string[] condition = { "," };
            string[] result = str.Split(condition, StringSplitOptions.None);
            Console.WriteLine(result[0]);
            Console.WriteLine(result[1]);
            Console.WriteLine(result[2]);
            Console.WriteLine(result[3]);
            Console.WriteLine("数组的行数:"+result.Length);
            Console.ReadLine();
        }
    }

结果:
在这里插入图片描述

数据格式转换的方法

C# Convert 方法是数据类型转换中最灵活的方法,它能够将任意数据类型的值转换成任意数据类型,前提是不要超出指定数据类型的范围。

方法说明
Convert.ToInt16()转换为整型(short)
Convert.ToInt32()转换为整型(int)
Convert.ToInt64()转换为整型(long)
Convert.ToChar()转换为字符型(char)
Convert.ToString()转换为字符串型(string)
Convert.ToDateTime()转换为日期型(datetime)
Convert.ToDouble()转换为双精度浮点型(double)
Conert.ToSingle()转换为单精度浮点型(float)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值