.tsvファイルのデータを加工する。【C#】

目次

経緯

.tsvファイルのデータを加工したいと思い、

今回勉強しました。

手順

まず、プログラムの流れを説明します。

  1. .tsvファイルを読む
  2. 351行目から開始して5つずつ間引く
  3. 347行目から350行目までの行を先頭に追加
  4. output.tsvとして出力する
  5. 指定した列のみで新しい行を作成
  6. 新しい行をsorted_output.tsvとして出力する

という流れです。下がコードです。

// .tsvファイルを開く
OpenFileDialog openFileDialog = new OpenFileDialog
{
    Filter = "TSVファイル (*.tsv)|*.tsv|すべてのファイル (*.*)|*.*",
    Title = "TSVファイルを選択してください"
};

if (openFileDialog.ShowDialog() != DialogResult.OK)
{
    return;
}

string filePath = openFileDialog.FileName;

// ファイルからデータを読み込み、行ごとにリストに格納
List<string> originalLines;
using (var sr = new StreamReader(filePath, Encoding.GetEncoding("shift_jis")))
{
    originalLines = sr.ReadToEnd().Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None).ToList();
}

// Skip processing 間引き
int n = 5;
List<string> reducedLines = new List<string>();

for (int i = 350; i < originalLines.Count; i += n)
{
    reducedLines.Add(originalLines[i]);
}

// 347行目から350行目を先頭に追加
reducedLines.InsertRange(0, originalLines.GetRange(347, 3));

//出力
string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
string outputFile = Path.Combine(desktopPath, "output.tsv");

// Shift-JISエンコーディングを使用
System.Text.Encoding encoding = System.Text.Encoding.GetEncoding("shift_jis");

File.WriteAllLines(outputFile, reducedLines, encoding);

// 列のインデックスのリストを作成
List<int> columnIndices = new List<int> { 0, 2, 3, 4, 5, 6, 7, 8, 9, 19, 20, 21, 23, 24, 25, 26, 28, 29, 33, 44, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111 };

// 新しい行のリストを作成
List<string> newLines = new List<string>();

// 各行をループ
foreach (string line in reducedLines)
{
    // 行をタブで分割
    string[] cells = line.Split('\t');

    // 新しい行を作成
    List<string> newLine = new List<string>();

    // 指定された列のデータだけを取り出す
    foreach (int index in columnIndices)
    {
        if (index < cells.Length)
        {
            newLine.Add(cells[index]);
        }
    }

    // 新しい行をリストに追加
    newLines.Add(string.Join("\t", newLine));
}

string sortedOutputFile = Path.Combine(desktopPath, "sorted_output.tsv");

File.WriteAllLines(sortedOutputFile, newLines, encoding);

MessageBox.Show("終わりました。");

所々で.tsvファイルを出力して、中身を確認しています。

この後の処理は加工したデータを.xlsxファイルにするとか考えています。

何かの参考になれば、幸いです。

ここまで読んでいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次