【发布时间】:2018-01-22 01:43:04
【问题描述】:
将所有行从文本文件保存到对象的正确方法是什么。我有类似这样的 .txt 文件
0001Marcus Aurelius 20021122160 21311
0002William Shakespeare 19940822332 11092
0003Albert Camus 20010715180 01232
从这个文件我知道写入文件的每个数据的位置,并且所有数据都被格式化了。
Line number is from 0 to 3
Book author is from 4 to 30
Publish date is from 31 to 37
Page num. is from 38 to 43
Book code is from 44 to 49
我创建了一个 Data 类,其中包含有关开始、结束位置、值、错误的信息。
然后我创建了包含数据类型列表的类 Line,以及包含从某行创建的所有错误的列表。将数据从行加载到对象数据后,我循环通过 lineError 并将所有行的错误添加到列表,因为我需要将每行的错误保存到数据库。
我的问题是将数据从文件保存到对象并在处理相同的数据保存到数据库之后的正确方法,建议一些更好的方法?
public class Data
{
public int startPosition = 0;
public int endPosition = 0;
public object value = null;
public string fieldName = "";
public Error error = null;
public Data(int start, int end, string name)
{
this.startPosition = start;
this.endPosition = end;
this.fieldName = name;
}
public void SetValueFromLine(string line)
{
string valueFromLine = line.Substring(this.startPosition, this.endPosition - this.startPosition);
// if else statment that checks validity of data (lenght, empty value)
this.value = valueFromLine;
}
}
public class Line
{
public List<Data> lineData = new List<Data>();
public List<Error> lineError = new List<Error>();
public Line()
{
AddObjectDataToList();
}
public void AddObjectDataToList()
{
lineData.Add(new Data(0, 3, "lineNumber"));
lineData.Add(new Data(4, 30, "bookAuthor"));
lineData.Add(new Data(31, 37, "publishData"));
lineData.Add(new Data(38, 43, "pageNumber"));
lineData.Add(new Data(44, 49, "bookCode"));
}
public void LoadLineDataToObjects(string line)
{
foreach(Data s in lineData)
{
s.SetValueFromLine(line);
}
}
public void GetAllErrorFromData()
{
foreach (Data s in lineData)
{
if(s.error != null)
{
lineError.Add(s.error);
}
}
}
}
public class File
{
public string fileName;
public List<Line> lines = new List<Line>();
}
【问题讨论】:
-
您可能想研究 序列化 - 如果它已保存到数据库,但为什么您还需要文本表单?请阅读How to Ask 并采取tour
-
那么您的问题实际上是如何将文本文件解析到数据库中?
-
不,我的问题是将数据从文件保存到对象的最佳方法是什么,因为在我将文件中的所有行保存到对象之后,我需要对数据进行一些验证,并且更容易循环第一行的所有数据并检查例如我的库中是否有作者数据,书籍代码等。如果某行没有我的数据库中的数据,我需要跳过将该行保存在数据库中。我将数据保存到数据库没有问题,效果很好。我只需要建议这个模型是否适合将数据从一行保存到对象并检查某些数据是否存在。
-
不,谢谢,这似乎很有趣,我的文件不是 csv。我没有分隔符。正如您在上面的示例中看到的那样,我将行号和作者姓名连接在一起。我只知道文件中每个数据的位置在哪里,并且该位置是恒定的。