我想在c sharp中用逗号分隔的行的文本文件中读取单词。
例如,我想读这一行:
9/10/2011 10:05,995.4,998.8,995.4,997.5,118000
并获取值:9/10/2011 10:05
,995.4
,998.8
,995.4
,997.5
和118000
。
接下来,我还需要将日期格式更改为MMddYYYY
,将时间格式更改为HHmmss
(例如100500
)。
我正在使用此代码进行读取是否有任何错误
private void button1_Click(object sender, EventArgs e)
{
StreamReader reader1 = File.OpenText(Path1);
string str = reader1.ReadToEnd();
reader1.Close();
reader1.Dispose();
// File.Delete(Path1);
string[] Strarray = str.Split(new char[] { Strings.ChrW(7) });
int abc = Strarray.Length - 1;
int xyz = 0;
bool status = true;
while (xyz <= abc)
{
try
{
status = true;
string[] strarray1 = Strarray[xyz].Split(",".ToCharArray());
string SecName = strarray1[0];
int a2 = 0;
while (status) //If the selected list is empty or the text file has selected name this will execute
{
status = false;
string SecSym = strarray1[1];
int DT = int.Parse(strarray1[2]);
int TM = int.Parse(strarray1[3]);
float O = float.Parse(strarray1[2]);
float H = float.Parse(strarray1[3]);
float L = float.Parse(strarray1[4]);
float C = float.Parse(strarray1[5]);
double OI = double.Parse(Convert.ToString(0));
float V = float.Parse(strarray1[6]);
// string a = string.Concat(SecName, ",",SecSym,",", DT, ",", TM, ",", O, ",", H, ",", L);
//writer.WriteLine(a);
}
}
catch
{ }
}
}
}
答案 0 :(得分:14)
.Net附带了一个可用于获取数据的现成CSV解析器。它是VB.net的一部分,但您可以通过添加对程序集Microsoft.VisualBasic
的引用(它很好,非常好)和一个using语句using Microsoft.VisualBasic.FileIO;
来轻松地在C#中使用它。
代码应该易于理解:
List<String[]> fileContent = new List<string[]>();
using(FileStream reader = File.OpenRead(@"data.csv")) // mind the encoding - UTF8
using(TextFieldParser parser = new TextFieldParser(reader))
{
parser.TrimWhiteSpace = true; // if you want
parser.Delimiters = new[] { "," };
parser.HasFieldsEnclosedInQuotes = true;
while (!parser.EndOfData)
{
string[] line = parser.ReadFields();
fileContent.Add(line);
}
}
CSV非常简单,但它可能包含逗号和换行符的引用值,因此使用Split
不是最佳选择。
答案 1 :(得分:4)
使用String.Split方法获取字符串数组:
string[] ar = line.Split(',')
答案 2 :(得分:4)
这应该让你开始。
using System;
using System.IO;
public class Sample
{
public static void Main() {
using (StreamReader reader = new StreamReader("yourfile.txt")) {
string line = null;
while (null != (line = reader.ReadLine())) {
string[] values = line.Split(',');
DateTime date = DateTime.Parse(values[0];
float[] numbers = new float[values.Length - 1];
for (int i = 1; i < values.Length - 1; i++)
numbers[i - 1] = float.Parse(values[i]);
// do stuff with date and numbers
}
}
}
}
我还发布了一个简单的CsvReader class,可能对您有所帮助。
答案 3 :(得分:2)
对于快速简单的解决方案,您可以流式传输文件并使用String.Split解析每一行,如下所示:
using (var sr = File.OpenText("myfile.csv"))
{
string line;
while ((line = sr.ReadLine()) != null)
{
var fields = line.Split(',');
var date = DateTime.Parse(fields[0].Trim());
var value1 = fields[0].Trim();
}
}
然而,这个appraoch如果相当容易出错,对于更健壮的解决方案,请查看CsvReader项目,它非常适合解析像这样的CSV文件。它将使用逗号处理字段值,修剪字段前后的空格等等。
如果您需要从DateTime.Parse无法识别的格式解析日期字符串,请尝试使用DateTime.ParseExact。
答案 4 :(得分:1)
对于任务的第一部分,使用Split
方法并将,
作为分隔符。要将字符串日期时间从一种格式转换为另一种格式,您需要将该字符串转换为日期时间(DateTime.Parse
,DateTime.ParseExact
),然后使用DateTime.ToString
方法转换为最终格式。
答案 5 :(得分:0)
行包含您的输出
StreamReader sStreamReader = new StreamReader("File Path");
string AllData = sStreamReader.ReadToEnd();
string[] rows = AllData.Split(",".ToCharArray());