-1

次のデータ形式のcsvファイルを読んでいます

14-Sep-12   ALUMINI 31-Dec-12   117.65  119.25  117.65  118.9   116.75  36
14-Sep-12   ALUMINI 30-Nov-12   116.95  118.65  116.8   118.4   116.5   252
14-Sep-12   ALUMINI 31-Oct-12   116.45  118.15  116.05  117.85  116.05  2802

私は次のコードでこのデータを読んでいます

List<string> sc = new List<string>();
filepath = "abc.csv" ;

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
StreamReader sr = new StreamReader(fs);

if (fs != null)
{
  while ((oneLine = sr.ReadLine()) != null)
  {
     sc.Add(oneLine);
  }

  sr.Close();

  // Now writing above data in  some file , fo and fout are already declared 
  fo = new FileStream("tempd.txt", FileMode.Append, FileAccess.Write);
  fout = new StreamWriter(fo);

  foreach (string str in sc)
  {
    // i am using ' ' as one of my splitter character
    char[] splitter = { ' ', ',', '\t' };
    string[] sa1 = str.Split(splitter);

    string wline = sa1[0] + "," + sa1[1] + "," + sa1[5] + "," + sa1[6] + "," + sa1[7] ;
    fout.WriteLine(wline);
  }
  fout.Close();
}

私の最大の問題は、データの最初の列が2012年9月14日に2012年9月14日に変更されたことです(-がありません)。これが私の残りのアプリケーションで問題を引き起こしています。

ファイルの読み取りと書き込み中に日付形式を変換する方法はありますか?この日付を2012年9月14日から2012年9月14日として保存したいと思います。

4

2 に答える 2

2

これがあなたが探している答えだと思います。

DateTime d = Convert.ToDateTime(sa1[0]);

string wline = d.ToString("yyyy-MM-dd") + "," + sa1[1] + "," + sa1[5] + "," + sa1[6] + "," + sa1[7];
于 2012-09-29T02:28:49.520 に答える
1

あなたの質問はあまり意味がないので、ここでいくつかの仮定をします。まず、CSVファイルだと言います。CSVはカンマ区切り値の略ですが、例を示すと、カンマがまったく表示されません。あなたがMicrosoftExcelでCSVを開いて、そこから投稿にコピーしたと思っているのは正しいですか?

もしそうなら、代わりにメモ帳(または別のテキストエディタ)で元のCSVファイルを開くようにお願いします。その場合、元のデータに実際にはダッシュが含まれていないことがわかります。

基本的に、CSVファイルで日付を12年9月14日として指定すると、Excelはこれが日付であることを認識しますが、Excelでは12年9月14日のように見える独自のデフォルトの日付形式でフォーマットします。

もう1つは、ファイル全体を文字列のリストに読み込んでから、リスト全体を再フォーマットされた新しいファイルに出力することです。これらすべてをメモリにロードするのではなく、一度に1行だけ操作してみませんか?入力ファイルと出力ファイルの両方を開き、入力から1行を読み取り、操作して、出力に書き込みます。次に、次の行にループし、完了したら両方のファイルを閉じます。これにより、使用するメモリがはるかに少なくなり、通常は実行速度が速くなります。

日付を再フォーマットしたい場合、それは簡単です。文字列を日付に解析するだけです。次に、.ToString()の文字列フォーマッタを使用して日付の出力を制御します。Geethangaの答えはこれをよく示していると思いますが、通常、Convert.ToDateTime()よりもDate.Parse()の方が優先されます。

于 2012-09-29T02:46:56.517 に答える