既存の行に影響を与えずに既存のCSVファイルに新しい行を追加する方法

ダモ

CSVファイルの既存のデータに影響を与えずに、最初の行に新しい2行を挿入したいと思います。

例:既存のCSVファイル形式:

Name      Address      Value
--------------------------------
abc       India        123
XXX       USA          456

既存のCSVファイルの列ヘッダーの前に新しい行を挿入する必要があります。例えば:

    Line1-A  ---> Need to add this line before column.
    Line2-B  ---> Need to add this line before column.

    Name      Address      Value
    --------------------------------
    abc       India        123
    XXX       USA          456

CSVファイルを作成するための既存のコードとこのコードを使用して、以下の列と行のみを作成できます。

    Name      Address      Value
    --------------------------------
    abc       India        123
    XXX       USA          456

ただし、行の上に2つの行を追加する必要があります。

using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication1
{
    public class CreateCSVFile
    {
        #region Create .csv File ANDON - DASHBOARD
        public void CreateFile(HistorianData objHistorian)
        {
            try
            {
                CreateCSVFile obj = new CreateCSVFile();
                StringBuilder sb = new StringBuilder();               

                DataTable dt = obj.GetData(objHistorian);


                foreach (DataRow dr in dt.Rows)
                {
                    foreach (DataColumn dc in dt.Columns)
                        sb.Append(obj.FormatCSV(dr[dc.ColumnName].ToString()) + ",");
                    sb.Remove(sb.Length - 1, 1);
                    sb.AppendLine();
                }

                //Create .csv File:
                string fileName = objHistorian.getTagName + "_" + "_" + DateTime.UtcNow.ToString("yyyy-MM-ddTHH_mm_ssZ") + ".csv";               
                string path = @"C:\Documents\" + fileName;



                if (!File.Exists(path))
                {
                    DataTableToCreateCSVFile(dt, path);                    
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error :" + ex.StackTrace, ex.Message);
            }
        }


        public DataTable GetData(HistorianData fields)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Tagname", typeof(string));
            dt.Columns.Add("TimeStamp", typeof(string));
            dt.Columns.Add("Value", typeof(string));
            dt.Columns.Add("DataQuality", typeof(string));
            dt.Rows.Add(fields.getTagName, fields.timeStamp, fields.getPropertyValue, fields.dataQuality);
            return dt;
        }

        public string FormatCSV(string input)
        {
            try
            {
                if (input == null)
                    return string.Empty;

                bool containsQuote = false;
                bool containsComma = false;
                int len = input.Length;
                for (int i = 0; i < len && (containsComma == false || containsQuote == false); i++)
                {
                    char ch = input[i];
                    if (ch == '"')
                        containsQuote = true;
                    else if (ch == ',')
                        containsComma = true;
                }

                if (containsQuote && containsComma)
                    input = input.Replace("\"", "\"\"");

                if (containsComma)
                    return "\"" + input + "\"";
                else
                    return input;
            }
            catch
            {
                throw;
            }
        }

        public void DataTableToCreateCSVFile(DataTable dtDataTable, string strFilePath)
        {
            StreamWriter sw = new StreamWriter(strFilePath, false);
            //headers  
            for (int i = 0; i < dtDataTable.Columns.Count; i++)
            {
                sw.Write(dtDataTable.Columns[i]);
                if (i < dtDataTable.Columns.Count - 1)
                {
                    sw.Write(",");
                }
            }
            sw.Write(sw.NewLine);
            foreach (DataRow dr in dtDataTable.Rows)
            {
                for (int i = 0; i < dtDataTable.Columns.Count; i++)
                {
                    if (!Convert.IsDBNull(dr[i]))
                    {
                        string value = dr[i].ToString();
                        if (value.Contains(','))
                        {
                            value = String.Format("\"{0}\"", value);
                            sw.Write(value);
                        }
                        else
                        {
                            sw.Write(dr[i].ToString());
                        }
                    }
                    if (i < dtDataTable.Columns.Count - 1)
                    {
                        sw.Write(",");
                    }
                }
                sw.Write(sw.NewLine);
            }
            sw.Close();
        }

        #endregion
    }

    public class HistorianData
    {
        public string getTagName { get; set; }
        public DateTime timeStamp { get; set; }
        public string dataQuality { get; set; }
        public string getPropertyValue { get; set; }
    }

}
ダニエル89

このアプローチを試すことができます。使用MemoryStream、新しい行を追加し、ファイルの内容を読み込んでから、すべてのバイトを書き込むためのMemoryStreamファイルへ:

string filePath = @"C:\Test\test.csv";
string csvLine = "value1; value2; value3" + Environment.NewLine;
byte[] csvLineBytes = Encoding.Default.GetBytes(csvLine);
using (MemoryStream ms = new MemoryStream())
{
      ms.Write(csvLineBytes , 0, csvLineBytes.Length);
      using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
       {                        
           byte[] bytes = new byte[file.Length];
           file.Read(bytes, 0, (int)file.Length);
           ms.Write(bytes, 0, (int)file.Length);                    
        }

        using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Write))
        {
            ms.WriteTo(file);
        }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

既存のcsvファイルに新しい行を追加する

分類Dev

最後の行に追加せずに既存のcsvファイルに新しい行を書き込む方法は?

分類Dev

既存のCSVファイルの最後に新しい行を追加する

分類Dev

fast-csv npmを使用して、既存のcsvファイルに新しい行または行のデータ(新しい行)を追加する方法

分類Dev

Javaの既存のファイルにテキストの新しい行を追加する方法は?

分類Dev

Java:文字列の新しい行を既存のテキストファイルに追加する方法

分類Dev

既存のファイルに新しい行を追加するにはどうすればよいですか?

分類Dev

新しいJSONObjectをjsonファイルの既存のJSONArrayに追加する方法

分類Dev

Linuxで実際の行末に影響を与えずにファイル内の改行文字を削除する方法

分類Dev

Pythonを使用して既存のファイルに行を追加する方法

分類Dev

nodejs json2csvの既存のcsvファイルに新しい行を追加するにはどうすればよいですか?

分類Dev

既存のedmxファイルに新しいクラスを追加する方法

分類Dev

既存の配列ファイルに新しい要素を追加する方法

分類Dev

既存のファイルに新しい属性を追加します

分類Dev

既存の行ごとに新しい行を追加する列を追加する方法

分類Dev

ディレクトリに影響を与えずにfindを使用して、すべてのファイルを再帰的に実行不能にする方法は?

分類Dev

変数を既存のCSVファイルの最後の行に保存する方法

分類Dev

Pythonで既存のファイルに行を追加する

分類Dev

既存のファイル名にGUIDを追加してCSVに保存する方法

分類Dev

ファイル内の既存の各行の上に新しい行を追加します

分類Dev

python既存の行に新しい行を追加する

分類Dev

既存のテーブルに新しい列を追加した場合の影響

分類Dev

Apachepoi-既存の.xlsxファイルに新しいページを追加する

分類Dev

Apachepoi-既存の.xlsxファイルに新しいページを追加する

分類Dev

FireDACを使用して既存のファイルに追加する方法

分類Dev

既存のxBaseファイル/テーブルに新しいフィールド/列を追加する方法

分類Dev

csvファイルに列を追加し、既存の列PowerShellに基づいて新しい列を埋めます

分類Dev

新しいExcelファイルを開かずに既存のExcelファイルに保存する

分類Dev

Pythonを使用して、新しい行を追加し、既存のExcelファイルに入力するにはどうすればよいですか?

Related 関連記事

  1. 1

    既存のcsvファイルに新しい行を追加する

  2. 2

    最後の行に追加せずに既存のcsvファイルに新しい行を書き込む方法は?

  3. 3

    既存のCSVファイルの最後に新しい行を追加する

  4. 4

    fast-csv npmを使用して、既存のcsvファイルに新しい行または行のデータ(新しい行)を追加する方法

  5. 5

    Javaの既存のファイルにテキストの新しい行を追加する方法は?

  6. 6

    Java:文字列の新しい行を既存のテキストファイルに追加する方法

  7. 7

    既存のファイルに新しい行を追加するにはどうすればよいですか?

  8. 8

    新しいJSONObjectをjsonファイルの既存のJSONArrayに追加する方法

  9. 9

    Linuxで実際の行末に影響を与えずにファイル内の改行文字を削除する方法

  10. 10

    Pythonを使用して既存のファイルに行を追加する方法

  11. 11

    nodejs json2csvの既存のcsvファイルに新しい行を追加するにはどうすればよいですか?

  12. 12

    既存のedmxファイルに新しいクラスを追加する方法

  13. 13

    既存の配列ファイルに新しい要素を追加する方法

  14. 14

    既存のファイルに新しい属性を追加します

  15. 15

    既存の行ごとに新しい行を追加する列を追加する方法

  16. 16

    ディレクトリに影響を与えずにfindを使用して、すべてのファイルを再帰的に実行不能にする方法は?

  17. 17

    変数を既存のCSVファイルの最後の行に保存する方法

  18. 18

    Pythonで既存のファイルに行を追加する

  19. 19

    既存のファイル名にGUIDを追加してCSVに保存する方法

  20. 20

    ファイル内の既存の各行の上に新しい行を追加します

  21. 21

    python既存の行に新しい行を追加する

  22. 22

    既存のテーブルに新しい列を追加した場合の影響

  23. 23

    Apachepoi-既存の.xlsxファイルに新しいページを追加する

  24. 24

    Apachepoi-既存の.xlsxファイルに新しいページを追加する

  25. 25

    FireDACを使用して既存のファイルに追加する方法

  26. 26

    既存のxBaseファイル/テーブルに新しいフィールド/列を追加する方法

  27. 27

    csvファイルに列を追加し、既存の列PowerShellに基づいて新しい列を埋めます

  28. 28

    新しいExcelファイルを開かずに既存のExcelファイルに保存する

  29. 29

    Pythonを使用して、新しい行を追加し、既存のExcelファイルに入力するにはどうすればよいですか?

ホットタグ

アーカイブ