0
CSVファイルの既存のデータに影響を与えることなく、最初の行に新しい2行を挿入します。既存の行に影響を与えずに既存のCSVファイルに新しい行を追加する方法
例えば: 既存のCSVファイル形式:
Name Address Value
--------------------------------
abc India 123
XXX USA 456
は、既存のCSVファイルの列ヘッダの前に新しい行を挿入する必要があります。 は、例えば:
Name Address Value
--------------------------------
abc India 123
XXX USA 456
しかし、行の上に2つの行を追加する必要があります。私は唯一の列と行の下に作成することができ、このコードを使用して&を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
私の既存のコード。
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; }
}
}
感謝の多くを。うまく動作する – dhamo