C#简单实现读取txt文本文件并分页存储到数组
最近做一个VR项目,需要把某个中草药的介绍信息分页显示到unity场景里然后用VR手柄切换信息。
unity的脚本是c#,就先在本地写了个代码测试了一下,利用控制台测试输出,到时候拷贝函数过去再结合交互就可以实现处理了。
可以自由设定每行要显示的字符数和每页要显示的行数。
函数返回每一页信息的string数组,和总页数两个参数。
下面是控制台测试效果:
txt文本:

处理效果:

下面是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; namespace ConsoleFileTest
{ class Program
{ static void Main(string[] args)
{ int totalPage; //这个值是总页数
string[] pageInformation = getPageInfo("E:\\test.txt",out totalPage); //得到的每页信息的数组
Console.WriteLine("返回的介绍信息有" + totalPage + "页\n"); //遍历所有页并显示信息
for(int i = 0; i < totalPage; i++)
{
Console.WriteLine("第" + i + "页:\n" + pageInformation[i]);
} Console.Read();
} static string[] getPageInfo(string pathRoot, out int pageNum)
{
string[] intro = new string[30]; //每行字符存储的数组
string[] pageInfo = new string[30]; //每页信息的数组,默认不超过30页。
int max_char_for_a_line = 15; //每行最多存储的字符个数
int max_line_for_a_page = 6; //每页最多存储的行数 string str = File.ReadAllText(pathRoot, Encoding.Default); //读取文件赋给一个string
int length = str.Length; //文件里字符串总长度 int correntLine = 0; //当前行数
int tempChar = 0; //当前行字符个数
for (int i = 0; i < length; i++)
{
if ((str[i] != '\n') && (str[i] != '\r'))
{
if (tempChar == max_char_for_a_line) //如果已经存了15个字符就换行
{
correntLine++;
tempChar = 0;
}
tempChar++;
intro[correntLine] += str[i];
}
else if (str[i] == '\n')
{
tempChar = 0;
correntLine++;
}
}
int totalLine = correntLine + 1;
//现在intro[]为分行数组,totalLine为总行数
int correntPage = 0; //当前第几页
int correntPageLine = 0; //当前页到几行
for (int i = 0; i < totalLine; i++)
{
if (correntPageLine == max_line_for_a_page) //到了最大行就换一页
{
correntPage++;
correntPageLine = 0;
}
pageInfo[correntPage] = pageInfo[correntPage] + intro[i] + "\n";
correntPageLine++;
} pageNum = correntPage + 1; //out出总页数
return pageInfo; //返回每页信息的数组
} }
}
比较无脑的实现,没什么高端算法。要注意的是,如果一个函数需要返回两个参数就需要用到out关键字,我这里一个是函数本身的返回值(为string类型的数组),还有一个是out出来的总页数值,这个需要在外部先定义然后获取。
另外一点是windows文本文档,在换行的时候默认是加入了两个字符的,分别为"\r"回车符和"\n"换行符,占了两个位置,处理的时候也需要注意。
写这篇博客的目的是想告诉自己,一定要多动脑,要不然脑子会生锈。
C#简单实现读取txt文本文件并分页存储到数组的更多相关文章
- unity读取txt,并且生成vector3的数组
读取txt的脚本: public void ReadFileTX(){ var str = File.ReadAllText(Application.streamingAssetsPath + &qu ...
- JavaScript读取txt文本文件方法详解
http://blog.163.com/sophie8910@126/blog/static/8304612620122834121264/ 第一步:创建一个可以将文件翻译成文件流的对象. Var f ...
- c#写对象来读取TXT文本文件
本博文让你知道怎样写对象,怎样读取文本文件,怎样根据实际条件判断与获取需要的文本行.参考下面网友的问题,根据源文来看,有些行输出的格式,需要把“,”替换为空格. 第一行还附加入后面的子行每一行的后面, ...
- matlab读取txt文本
textread函数 原文:http://blog.sina.com.cn/s/blog_618af1950100k926.html 文档:https://ww2.mathworks.cn/help/ ...
- 怎样用 I/O流读取txt文件?
java.io包提供了用来永久保存对象状态的机制,可处理各种类型的流,如文件流.字节流.字符流等,还提供实现可串行化Serializable接口.可处理对象流. Java语言提供3种自动生成的标准流. ...
- php对文本文件进行分页功能简单实现
php对文本文件进行分页功能简单实现 <!DOCTYPE> <html> <head> <meta http-equiv="Content-type ...
- Javascript写入txt和读取txt文件的方法
文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...
- 别再用"while (!feof(file))"来逐行读取txt文件了!
起因 执行一个C/C++程序出现segment fault.它逐行读取文本文件,每一行是一个图片名字,然后读图.处理图像,etc. 发现最后一次读取的文件名不存在(空的). 正确的逐行读取txt文件 ...
- matlab中读取txt数据文件(txt文本文档)
matlab中读取txt数据文件(txt文本文档) 根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如te ...
随机推荐
- loj #2116. 「HNOI2015」开店
#2116. 「HNOI2015」开店 题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非 ...
- python操作RabbitMQ、Redis、Memcache、SQLAlchemy
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- chmod变更文件或目录的权限
chmod命令用来变更文件或目录的权限.在UNIX系统家族里,文件或目录权限的控制分别以读取.写入.执行3种一般权限来区分,另有3种特殊权限可供运用.用户可以使用chmod指令去变更文件与目录的权限, ...
- WPF 仿IPhone滑块开关 样式 - CheckBox
原文:WPF 仿IPhone滑块开关 样式 - CheckBox <Style x:Key="CheckRadioFocusVisual"> <Setter Pr ...
- Exalogic硬件架构
1.硬件配置见如下图表. 组件名称 满配 半配 1/4配 1/8配 Sun Rack II 1242 1 1 1 1 计算节点 X2-2.X3-2.X4-2.X5-2.X6-2 30 16 8 4 存 ...
- CentOS 6.* 安装node
CentOS6 安装node 使用node -v 是报错 ./node: error while loading shared libraries: libstdc++.so.6: cannot op ...
- DP小小结
入门题 : [Luogu1441]砝码称重 , [NOIP2015]子串 [AHOI2009]中国象棋 , 详见代码 [HNOI2007]梦幻岛宝珠 , 详见代码 [NOIP2012]开车旅行 , 没 ...
- POJ_1456 Supermarket 【并查集/贪心】
一.题面 POJ1456 二.分析 1.贪心策略:先保证从利润最大的开始判断,然后开一个标记时间是否能访问的数组,时间尽量从最大的时间开始选择,这样能够保证后面时间小的还能够卖. 2.并查集:并查集直 ...
- 格子刷油漆(dp)-----------蓝桥备战系列
标题:格子刷油漆 X国的一段古城墙的顶端可以看成 2*N个格子组成的矩形(如图1所示),现需要把这些格子刷上保护漆. 你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但 ...
- HDU - 4291 循环节
还有这种操作? #include<bits/stdc++.h> #define rep(i,j,k) for(register int i=j;i<=k;i++) #define p ...