我试图找出从文件中读取数据的最佳方法。我想出了一个方法,但作为一个小。我知道这不是最好的办法。这是我的文本文件的样子:
--------Text File text.txt---------
username: nothingeag
accesscode: 123456
value: 74
email: [email protected]
--------End of File----------------
这就是我想出的:
using System;
using System.IO;
using System.Linq;
namespace FileSystem
{
class Program
{
static void Main(string[] args)
{
var username = "";
var accesscodeStr = "";
var accesscode = 0;
var valueStr = "";
var value = 0;
var email = "";
var path = @"C:\Users\jthompson\text.txt";
//Read Lines
username = File.ReadLines(path).Skip(0).Take(1).First();
accesscodeStr = File.ReadLines(path).Skip(1).Take(1).First();
valueStr = File.ReadLines(path).Skip(2).Take(1).First();
email = File.ReadLines(path).Skip(3).Take(1).First();
//Trim retrieved data
username = username.Substring(10);
accesscodeStr = accesscodeStr.Substring(12);
valueStr = valueStr.Substring(7);
email = email.Substring(7);
//Parse the INT values
accesscode = Int32.Parse(accesscodeStr);
value = Int32.Parse(valueStr);
//Display the Data
Console.WriteLine(accesscode);
Console.WriteLine(email);
Console.WriteLine(username);
Console.WriteLine(value);
}
}
}
这完全符合我的需要:
123456
[email protected]
nothingeag
74
在文本文件中阅读这样的特定项目的最佳方法是什么?
如果输入文件结构是静态的,则意味着它不会改变顺序;您可以使用下面的代码而不是// ReadLines代码。
var allLines = File.ReadAllLines(path);
var dataSet = allLines.Select(line => line.Trim().Split(' ')[1]).ToArray();
// Add conditional checks regarding the length of the dataset and any thing else.
var userName = dataSet[0];
var accesscode = Convert.ToInt32(dataSet[1]);
var value = Convert.ToInt32(dataSet[2]);
var email = dataSet[3];
// Then your console.writeline statements here.
如果您不确定订单,可以使用字典存储行拆分的两个部分,其中一个用于键,另一个用于存储值。然后打印出来。
好吧,你犯了很多错误:
以下是上层思想的简单实现:
string[] fileInput = File.ReadAllLines(path);
string usernameString = fileInput[0].Split(": ")[1];
string accessCodeString = fileInput[1].Split(": ")[1];
string valueString = fileInput[2].Split(": ")[1];
string emailString = fileInput[3].Split(": ")[1];
int accessCode;
if (!int.TryParse(accessCodeString, out accessCode))
{
//Do something when accesscode is not int.
}
int value;
if (!int.TryParse(accessCodeString, out value))
{
//Do something when value is not int.
}
Console.WriteLine(accesscode);
Console.WriteLine(emailString);
Console.WriteLine(usernameString);
Console.WriteLine(value);
这不是一个完美的解决方案,但它是在正确的方向。
我知道这看起来有点傻,但Microsoft.VisualBasic程序集有一些很好的资源来读取文本文件。这真的很快而且很脏。我只是使用':'作为其他人建议的分隔符。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.VisualBasic;
namespace SandBox
{
class Program
{
static void Main(string[] args)
{
List<string> outputStrings = new List<string>();
string path = @"C:\Users\oa971d\Desktop\textSample.txt";
using (Microsoft.VisualBasic.FileIO.TextFieldParser parser =
new Microsoft.VisualBasic.FileIO.TextFieldParser(path))
{
parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
parser.SetDelimiters(":"); //.csv
//parser.SetDelimiters("\t"); //tab delimited .txt
while(!parser.EndOfData)
{
string[] fields = parser.ReadFields();
if(fields.Length>1)
outputStrings.Add(fields[1]);
}
}
foreach(string s in outputStrings)
{ Console.WriteLine(s); }
Console.ReadLine();
}
}
}