📄 hongwaishuju.cs
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Data;
using Newtera.ParserGen.Converter;
namespace HongWaiParserGen
{
#region 读取红外数据的文件夹数据文件的程序
public class HongWaiShuJu : DataSourceConverterBase
{
private DataSet ds; //数据集
string dataName; //文件路径
private int pageSize = 1000;
#region 构造函数
/// <summary>
/// 初始化
/// </summary>
public HongWaiShuJu()
{
ds = new DataSet();
dataName = null;
}
#endregion
#region SupportPaging方法
/// <summary>
/// 设置是否分块读取数据
/// </summary>
public override bool SupportPaging
{
get
{
return true;
}
}
#endregion
#region Close方法
/// <summary>
/// 关闭的连接
/// </summary>
public override void Close()
{
this.ds = null;
}
#endregion
#region 不分块读取数据的方法
/// <summary>
/// 数据转换器方法
/// </summary>
/// <param name="dataSourceName">转换数据的路径</param>
/// <returns>数据集</returns>
public override System.Data.DataSet Convert(string dataSourceName)
{
DataSet ds = ReadData(dataSourceName, pageSize); //调用读取数据的公共函数
return ds; //返回数据集
}
#endregion
#region 分块读取数据时首次调用的函数
/// <summary>
/// 首次调用的方法
/// </summary>
/// <param name="dataSourceName">文件路径</param>
/// <param name="pageSize">分块读取的记录数</param>
/// <returns>数据集</returns>
public override DataSet ConvertFirstPage(string dataSourceName, int pageSize)
{
// pageSize = 2; //设置分块读取数据行数
dataName = dataSourceName; //赋值数据路径
DataSet ds = ReadData(dataSourceName, pageSize); //调用读取数据的公共函数
return ds; //返回读取的数据集
}
#endregion
#region 循环分块调用读取数据函数
/// <summary>
/// 循环方法
/// </summary>
/// <returns>数据集</returns>
public override DataSet ConvertNextPage()
{
DataSet dataset = new DataSet();
dataset = ReadData(dataName, pageSize); //调用公共读取数据的方法
return dataset;
}
#endregion
#region 公共读取数据函数
public DataSet ReadData(string dataSourceName, int pageSize)
{
DataSet ds = new DataSet();
//遍历用户选择的文件所在的文件夹,找出所有文件,根据文件名自动选择下列读取方式
string filePath=dataSourceName.Substring(0,dataSourceName.LastIndexOf('\\'));
// int filecounts = 0;//定义一个变量,表示文件数目
FileInfo[] NewFileInfo;//定义一个数组,储存找到的文件并作为返回值
DirectoryInfo FatherDirectory = new DirectoryInfo(filePath); //创建一个当前目录的实例
NewFileInfo = FatherDirectory.GetFiles("*.*", SearchOption.AllDirectories);
//得到文件集,包括目录及其子目录下的所有文件
string strFilePath = filePath.Substring(filePath.LastIndexOf("\\")+1, filePath.Length - filePath.LastIndexOf("\\")-1);
for (int k = 0; k <= NewFileInfo.GetUpperBound(0); k++)
{
string strFileName = filePath + "\\" + NewFileInfo[k];
FileStream fs = new FileStream(strFileName, FileMode.Open);
if (NewFileInfo[k].ToString().IndexOf("yc") >= 0) //标准格式数据,无标题。
{
StreamReader sr = new StreamReader(fs);
DataTable dt = new DataTable();
dt.TableName = NewFileInfo[k].ToString().Replace(".", "_");
string[] arrStrLine = sr.ReadToEnd().Trim().Split('\r'); //读取整个文件内容,并按照每行一个数组存储。
dt.Columns.Add("所属型号");
dt.Columns.Add("试验项目编号");
dt.Columns.Add("数据类别");
string strLine1 = arrStrLine[0].Replace("\t", " ");//将第一行数据处理为一个空格分隔的数据。
while (strLine1.IndexOf(" ") >= 0) //如果存在两个以上的空格,替换成一个
{
strLine1 = strLine1.Replace(" ", " ");
}
string[] arrStrFirstLine = strLine1.Split(' '); //将第一行数据按没列一个数组存储。
int nColumnsCount = arrStrFirstLine.GetUpperBound(0); //第一行数据的列数。
for (int c = 1; c <= nColumnsCount + 1; c++)
{
string cname = "数据" + c.ToString();
dt.Columns.Add(cname);
}
// string[] ArrStrShuJu = new string[nColumnsCount+3];
for(int i=0;i<=arrStrLine.GetUpperBound(0);i++)
{
string strCurrLine = arrStrLine[i].Trim();
strCurrLine = strCurrLine.Replace("\t", " ");
while (strCurrLine.IndexOf(" ") >= 0) //如果存在两个以上的空格,替换成一个
{
strCurrLine = strLine1.Replace(" ", " ");
}
strCurrLine = " "+strCurrLine;
string[] ArrStrShuJu = strCurrLine.Split(' ');
//假如文件夹名称不是“20开头”,补上“20”
if (strFilePath.IndexOf("\\20") > 0)
{
ArrStrShuJu[1] = "PL12_20" + strFilePath;
}
else
{
ArrStrShuJu[1] = "PL12_" + strFilePath;
}
ArrStrShuJu[0] = "PL12";
ArrStrShuJu[2] = "仿真机数据";
dt.Rows.Add(ArrStrShuJu);
}
ds.Tables.Add(dt);
sr.Close();
}
else if (NewFileInfo[k].ToString().IndexOf("行式规范标题") >= 0) //行式规范标题标准格式文本数据。
{
StreamReader sr = new StreamReader(fs,Encoding.Default);
DataTable dt = new DataTable();
dt.TableName = NewFileInfo[k].ToString().Replace(".", "_");
string[] arrStrLine = sr.ReadToEnd().Trim().Split('\r'); //读取整个文件内容,并按照每行一个数组存储。
dt.Columns.Add("所属型号");
dt.Columns.Add("试验项目编号");
dt.Columns.Add("数据类别");
string strFirstLine = arrStrLine[0].Trim();
strFirstLine = strFirstLine.Replace("\t", " ");//将第一行数据处理为一个空格分隔的数据。
while (strFirstLine.IndexOf(" ") > -1)
{
strFirstLine = strFirstLine.Replace(" ", " ");
}
string[] arrStrFirstLine = strFirstLine.Split(' '); //将第一行数据按没列一个数组存储。
int nColumnsCount = arrStrFirstLine.GetUpperBound(0); //第一行数据的列数。
for (int c = 0; c <= nColumnsCount ; c++)
{
string cname = arrStrFirstLine[c];
dt.Columns.Add(cname);
}
// string[] ArrStrShuJu = new string[nColumnsCount+3];
for (int i = 1; i <= arrStrLine.GetUpperBound(0); i++)
{
string strCurrLine = arrStrLine[i].Trim();
strCurrLine = strCurrLine.Replace("\t", " ");
while (strCurrLine.IndexOf(" ") > -1)
{
strCurrLine = strCurrLine.Replace(" ", " ");
}
strCurrLine = " " + strCurrLine; //把数据中的空格都去掉
string[] ArrStrShuJu = strCurrLine.Split(' ');
//假如文件夹名称不是“20开头”,补上“20”
if (strFilePath.IndexOf("\\20") > 0)
{
ArrStrShuJu[1] = "PL12_20" + strFilePath;
}
else
{
ArrStrShuJu[1] = "PL12_" + strFilePath;
}
ArrStrShuJu[0] = "PL12";
ArrStrShuJu[2] = "仿真机数据";
dt.Rows.Add(ArrStrShuJu);
}
ds.Tables.Add(dt);
sr.Close();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -