余分なデータがたくさん含まれている.datファイルがあります(数千行のうち、必要なのは数百行だけです)。私は現在、それを読み取ってフィルタリングできるコードを持っています。以前は、これを使用してサマリーデータをコンソールに出力していましたが(現在のコードはこれを実行します)、関連する個々の行をExcelで読み取り可能なファイルに出力できるようにする必要があります。含まれるデータはASCII形式です。
linqはよくわからないので、できるだけ使用を避けようとしています。linqを使用しない場合の難易度に対処するだけです。
調査によると、これを行う最も効率的な方法は、C#にファイルを読み取らせ、すべてをリストとしてメモリに保存してから、そのリスト全体をExcelに書き込むことです。残りの作業は手動で行うことができてうれしいです。このリストがExcelになったら、c#からリストを取得してExcel列にダンプするだけです。すべてのデータの長さが固定されていることを考えると、これを行う方法に大きな制限はありませんが、可能であれば、すべてを列Aに入れるのではなく、各変数を新しい列に書き込むことをお勧めします。
現在のコード:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using NsExcel = Microsoft.Office.Interop.Excel;
class Program
{
static void Main(string[] args)
{
List<string> myList = new List<string>();
int i = 1;
using (StreamReader reader = new StreamReader("file.dat"))
{
string line;
var locations = new Dictionary<string, int[]>() {
{"210", new [] {405, 4, 128, 12, 141, 12, 247, 15, 121, 3}},
{"310", new [] {321, 4, 112, 12, 125, 12, 230, 15, 105, 3}},
{"410", new [] {477, 4, 112, 12, 125, 12, 360, 15, 105, 3}}
};
while ((line = reader.ReadLine()) != null)
{
var lineStart = line.Substring(0, 3);
if (lineStart == "210" || lineStart == "310" || lineStart == "410")
{
var currentLocations = locations[lineStart];
var letters = line.Substring(currentLocations[0], currentLocations[1]);
var tvolume =
int.Parse(line.Substring(currentLocations[2], currentLocations[3])) +
int.Parse(line.Substring(currentLocations[4], currentLocations[5]));
var tprice = long.Parse(line.Substring(currentLocations[6], currentLocations[7]));
var mvolume = tprice * tvolume * 0.01 * 0.0000001;
var currency = line.Substring(currentLocations[8], currentLocations[9]);
// double total = myList.
Console.WriteLine(i);
Console.WriteLine(lineStart);
Console.WriteLine(letters);
Console.WriteLine(tvolume * 0.01);
Console.WriteLine(tprice * 0.0000001);
Console.WriteLine("{0:N}", mvolume);
Console.WriteLine(currency + "\n");
i = i + 1;
}
}
//Dictionary<string, int> tvolumeDictionary = new Dictionary<string, int>();
//Dictionary<string, double> mvolumeDictionary = new Dictionary<string, double>();
}
}
}