-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    
12:33    
14:25    
14:39    
15:07

誰でもこれについて私を助けることができますか?

4

3 に答える 3

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 に答える