-3

我有一个包含以下方式的数据的文本文件。我想使用 c# 按列读取这个文件。

tvID    |acdID| logonID   |agentName      |modify    |exception|start|stop |externalID
70118349|1    |19131187356|Reed,Debrielle |1375205999|Open     |12:33|14:25|USWDER59
70118349|1    |19131187356|Reed, Debrielle|1375213297|Meeting  |14:25|14:39|USWDER59
70118349|1    |19131187356|Reed, Debrielle|1375214248|Open     |14:39|15:07|USWDER59
70118349|1    |19131187356|Reed, Debrielle|1375215830|Break    |15:07|15:21|USWDER59

例如,我希望将所有数据放在 start 标题下,如下所示:

start    
12:33    
14:25    
14:39    
15:07

谁可以帮我这个事。

4

3 回答 3

1

您必须逐行阅读,并用列分隔符 (|) 分隔每一行

string [] columns;
using(StreamReader sr = new StreamReader("path_to_file"))
{
   line=sr.ReadLine().Split('|');
   if(line.Length>6) 
       //line[6] is your time data
      //Do something with this
}
于 2013-08-04T11:22:14.220 回答
1

文件是一个顺序设备,您需要逐个字符地读取它 - 没有直接的方法可以将它作为内存来寻址。

您可以逐行阅读,然后调用String.Split函数,然后您可以访问所需的字段:

var lines = File.ReadLines(fileName);
foreach (var line in lines)
{
     var fields = line.Split(new char[]{ '|' });
     System.out.println(fields[6]); // Use appropriate index here.
}
于 2013-08-04T11:22:20.873 回答
1

您最好的选择可能是为数据定义一个数据结构并将整个文件(或至少您想要的部分)读入该结构。然后,您可以与内存中的该结构进行交互,并根据需要对其进行操作。

例如,您可以定义一个类,例如:

public class SomeObject // give it a more meaningful name, of course
{
    public DateTime Start { get; set; }
    public DateTime Stop { get; set; }
}

然后,您可能会向该类添加一个静态工厂,该工厂从给定的字符串(应用程序从文件中获取,因为该类本身不应该知道文件而只知道其中的数据)反序列化。它可以像从文件中读取所有行并将行枚举传递给该工厂方法一样简单。然后该工厂方法将解析每一行的数据。

看起来数据是用管道分隔的,所以这样的事情可能是一个好的开始:

public static SomeObject Deserialize(IEnumerable<string> input)
{
    var result = new SomeObject();

    foreach (var dataLine in input.Skip(1))
    {
        var dataElements = dataLine.Split('|');
        result.Start = DateTime.Parse(dataElements.Skip(6).First());
        result.Stop = DateTime.Parse(dataElements.Skip(7).First());
    }

    return result;
}

您可能还想在输入上添加一些错误检查,TryParse如果数据并不总是可直接解析,则使用数据,在这里或那里进行一些防御性编程。但你明白了。

然后操作内存中的数据变得微不足道。例如,您可以从以下对象的列表中获取您的Start列:

var startTimes = listOfObjects.Select(o => o.Start);
于 2013-08-04T11:24:06.360 回答