C # में CSV फ़ाइल में डेटा लिखना


198

मैं csvC # भाषा का उपयोग करके पंक्ति द्वारा एक फ़ाइल पंक्ति में लिखने का प्रयास कर रहा हूं । यहाँ मेरा कार्य है

string first = reader[0].ToString();
string second=image.ToString();
string csv = string.Format("{0},{1}\n", first, second);
File.WriteAllText(filePath, csv);

पूरा फ़ंक्शन एक लूप के अंदर चलता है, और हर पंक्ति को csvफ़ाइल में लिखा जाना चाहिए । मेरे मामले में, अगली पंक्ति मौजूदा पंक्ति को ओवरराइट कर देती है और अंत में, मुझे csv फ़ाइल में केवल एक ही रिकॉर्ड मिल रहा है जो कि अंतिम है। मैं csvफ़ाइल में सभी पंक्तियों को कैसे लिख सकता हूं ?


बल्कि एक का उपयोग करें StringBuilderऔर फिर एक बचा?
जोहान

1
यदि यह एक कार्य नहीं है जिसे आपको दैनिक पूरा करने की आवश्यकता है, तो मैं LinqPad का उपयोग करने की सलाह देता हूं, जो एक सीएसवी में डेटा लिखने के लिए एक आसान कार्य के साथ आता है:Util.WriteCsv (mydatacollection, @"c:\temp\data.csv");
मार्को

3
एक साइड नोट पर, सुनिश्चित करें कि आपके सीएसवी मान एनकोडेड हैं। यानी अगर उनमें से एक में एक अल्पविराम या एक अंत-पंक्ति चरित्र है तो यह आपकी फ़ाइल को गड़बड़ कर सकता है। मैं आमतौर पर सीएसवी सामान के लिए केवल तीसरे पक्ष के काम का उपयोग करता हूं।
Matthijs वेसल्स

@MatthijsWessels कोई लाइब्रेरी सुझाव?
अराश मोटामेदी

जवाबों:


311

अपडेट करें

अपने भोले दिनों में, मैंने इसे मैन्युअल रूप से करने का सुझाव दिया था (यह एक सरल प्रश्न का एक सरल समाधान था), हालांकि इसके अधिक से अधिक लोकप्रिय हो जाने के कारण, मैं लाइब्रेरी CsvHelper का उपयोग करने की सलाह दूंगा जो सभी सुरक्षा जांच करता है, आदि।

CSV जिस तरह से प्रश्न / उत्तर बताता है उससे अधिक जटिल है।

मूल उत्तर

जैसा कि आपके पास पहले से ही एक लूप है, इसे इस तरह से करने पर विचार करें:

//before your loop
    var csv = new StringBuilder();

//in your loop
    var first = reader[0].ToString();
    var second = image.ToString();
    //Suggestion made by KyleMit
    var newLine = string.Format("{0},{1}", first, second);
    csv.AppendLine(newLine);  

//after your loop
    File.WriteAllText(filePath, csv.ToString());

या इस आशय के लिए कुछ। मेरा तर्क यह है: आपको हर आइटम के लिए फ़ाइल को लिखने की आवश्यकता नहीं होगी, आप केवल एक बार स्ट्रीम खोलेंगे और फिर इसे लिखेंगे।

आप प्रतिस्थापित कर सकते हैं

File.WriteAllText(filePath, csv.ToString());

साथ में

File.AppendAllText(filePath, csv.ToString());

यदि आप csv के पिछले संस्करणों को उसी फ़ाइल में रखना चाहते हैं

सी # 6

यदि आप c # 6.0 का उपयोग कर रहे हैं तो आप निम्न कार्य कर सकते हैं

var newLine = $"{first},{second}"

संपादित करें

यहां एक प्रश्न का लिंक दिया गया है जो बताता है कि क्या Environment.NewLineकरता है।


1
@ रज़ात नं, क्योंकि 2 एक नई लाइन है
जोहान

4
तुम भी से छुटकारा पा सकते {2}और Environment.NewLineऔर प्रयोग AppendLineके बजायAppend
KyleMit

37
और तब क्या होता है जब आपकी CSV सामग्री में अल्पविराम होता है जिसे भागने की आवश्यकता होती है? आपको उद्धरण की आवश्यकता है। और जब एक बोली से बचने की जरूरत होती है तो क्या होता है? सही ढंग से CSV फ़ाइलों का निर्माण करना इस उत्तर से अधिक जटिल है।
मगसम

1
मुझे "अपवाद
स्वरुप

3
मैंने आपके समाधान की कोशिश की है, लेकिन मेरे लिए (फ्रेंच संस्कृति) System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparatorअल्पविराम के बजाय इसका उपयोग करके बेहतर काम करता है ।
A.Picicat

89

मैं आपको अत्यधिक थकाऊ मार्ग पर जाने की सलाह दूंगा। खासकर यदि आपकी फ़ाइल का आकार बड़ा है।

using(var w = new StreamWriter(path))
{
    for( /* your loop */)
    {
        var first = yourFnToGetFirst();
        var second = yourFnToGetSecond();
        var line = string.Format("{0},{1}", first, second);
        w.WriteLine(line);
        w.Flush();
    }
}

File.AppendAllText()एक नई फ़ाइल खोलता है, सामग्री लिखता है और फिर फ़ाइल को बंद कर देता है। डेटा को ओपन स्ट्रीम में लिखने की तुलना में ओपनिंग फाइल्स एक बहुत ही संसाधन-भारी ऑपरेशन है। लूप के अंदर किसी फ़ाइल को खोलने से प्रदर्शन ड्रॉप होगा।

जोहान द्वारा सुझाए गए दृष्टिकोण ने स्मृति में सभी आउटपुट को संग्रहीत करने और फिर एक बार लिखने के द्वारा उस समस्या को हल किया। हालाँकि (बड़ी फ़ाइलों के मामले में) आप बड़ी मात्रा में रैम की खपत करेंगे और यहां तक ​​कि दुर्घटना भी कर सकते हैंOutOfMemoryException

मेरे समाधान का एक और लाभ यह है कि आप इनपुट डेटा में वर्तमान स्थिति को सहेजकर पॉज़िंग \ रिज्यूमिंग को लागू कर सकते हैं।

युपीडी। सही जगह पर इस्तेमाल किया गया


1
आपको अपने लूप को स्टेटमेंट के अंदर रखना चाहिए using। अन्यथा आप बार-बार फाइल को फिर से खोलने जा रहे हैं।
ओलिवर

2
अच्छा उत्तर। यदि आप प्रारूप स्ट्रिंग से "{2}" निकालते हैं और "छवि" को उसी पंक्ति में "दूसरा" से हटाते हैं, तो सही उत्तर दें। इसके अलावा, लेखक को w.Close () के साथ बंद करना न भूलें; डब्ल्यू। फ़्लश () की ज़रूरत नहीं है।
MovAX13h

6
यह उत्तर वर्णों से बचने की आवश्यकता को अनदेखा करता है।
मगसम

क्या हम यह भी जोड़ सकते हैं कि यह आपके लेखक को इस तरह स्थापित करने में मदद करता है: नया स्ट्रीमविटर (पथ, असत्य, एन्कोडिंग
.UTF8

यदि आपके पास कुछ सौ मिलियन लाइनें हैं ... तो क्या आपको हर लाइन को फ्लश करना चाहिए?
अर्दीन्टो सुहेन्द्र

31

सीएसवी फाइलों को हाथ से लिखना मुश्किल हो सकता है क्योंकि आपके डेटा में अल्पविराम और नए अंक हो सकते हैं। मेरा सुझाव है कि आप इसके बजाय एक मौजूदा पुस्तकालय का उपयोग करें।

इस प्रश्न में कुछ विकल्पों का उल्लेख है।

क्या C # में कोई CSV पाठक / लेखक पुस्तकालय हैं?


4
यह केवल यथोचित सही उत्तर है। यह शर्म की बात है कि दूसरे बुरे जवाब हैं जो इसे हाथ से करने की कोशिश करते हैं।
मगसम

17

मैं दो पार्स समाधान का उपयोग करता हूं क्योंकि इसे बनाए रखना बहुत आसान है

// Prepare the values
var allLines = (from trade in proposedTrades
                select new object[] 
                { 
                    trade.TradeType.ToString(), 
                    trade.AccountReference, 
                    trade.SecurityCodeType.ToString(), 
                    trade.SecurityCode, 
                    trade.ClientReference, 
                    trade.TradeCurrency, 
                    trade.AmountDenomination.ToString(), 
                    trade.Amount, 
                    trade.Units, 
                    trade.Percentage, 
                    trade.SettlementCurrency, 
                    trade.FOP, 
                    trade.ClientSettlementAccount, 
                    string.Format("\"{0}\"", trade.Notes),                             
                }).ToList();

// Build the file content
var csv = new StringBuilder();
allLines.ForEach(line => 
{
    csv.AppendLine(string.Join(",", line));            
});

File.WriteAllText(filePath, csv.ToString());

1
बड़ी फ़ाइलों का निर्माण करते समय आपको इस दृष्टिकोण से स्मृति दबाव का सामना करना पड़ सकता है। यदि आपने .ToList को हटा दिया है, तो सभी लिंक एक IEnumerbale <ऑब्जेक्ट []> होगा। उसके बाद आप "प्रत्येक के लिए" के बजाय इसका चयन कर सकते हैं अर्थात सभी, चयन करें (पंक्ति => csv.AppendLine (string.Join (",", line))) जो आपको एक IEnumerable <string> देगा। यह अब केवल फ़ाइल लेकिन WriteAllLines विधि को पारित किया जा सकता है। इसका मतलब यह है कि पूरी चीज आलसी है और आपको हर चीज को स्मृति में खींचने की जरूरत नहीं है, लेकिन आप अभी भी उस वाक्य रचना को प्राप्त करते हैं जिससे आप खुश हैं।
RhysC

मैं एक सीएसवी फ़ाइल में लिखने के लिए आपके तरीके का उपयोग कर रहा हूं। यह बहुत अच्छा है! मेरे नवीनतम कार्यान्वयन के लिए मुझे So के File.AppendAllLines(filePath, lines, Encoding.ASCII);बजाय उपयोग करने की आवश्यकता है File.WriteAllText(filePath, csv.ToString());, मैं कुछ बहुत ही स्पष्ट कर रहा हूं। StringBuilder का उपयोग करके csv का निर्माण करने के बाद, मैं इसे AppendAllLines पर कॉल के लिए IEnumerable प्राप्त करने के लिए एक सूची <string> में परिवर्तित करता हूं, जो csv.ToString () को एक पैरामीटर के रूप में स्वीकार नहीं करेगा: List<string> lines = new List<string>(); lines.Add(csv.ToString(0, csv.Length));क्या आप ऐसा करने के लिए बेहतर तरीका हैं?
पेट्रीसिया

12

हर बार कॉल करने के बजाय AppendAllText()आप एक बार फाइल खोलने के बारे में सोच सकते हैं और फिर एक बार पूरी सामग्री लिख सकते हैं:

var file = @"C:\myOutput.csv";

using (var stream = File.CreateText(file))
{
    for (int i = 0; i < reader.Count(); i++)
    {
        string first = reader[i].ToString();
        string second = image.ToString();
        string csvRow = string.Format("{0},{1}", first, second);

        stream.WriteLine(csvRow);
    }
}

@aMazing: क्षमा करें, एक टाइपो। अब तय हो गया है।
ओलिवर

इस उत्तर में यह भी शामिल है कि एक्सटेंशन को CSV होना चाहिए। यदि यह xls है, तो डेटा सभी एक कॉलम में दिखाई देगा ... csv यह प्रत्येक कॉलम में सही ढंग से दिखाई देगा।
GMAN

10

इसके बजाय केवल AppendAllText का उपयोग करें:

File.AppendAllText(filePath, csv);

AppendAllText का एकमात्र नकारात्मक पक्ष यह है कि जब फ़ाइल मौजूद नहीं होगी तो यह त्रुटि को फेंक देगा, इसलिए इसे अवश्य चेक किया जाना चाहिए

क्षमा करें, दस्तावेज़ पढ़ने से पहले गोरा क्षण । वैसे भी, WriteAllText विधि फ़ाइल में पहले से मौजूद किसी भी चीज़ को ओवरराइट कर देती है, यदि फ़ाइल मौजूद है।

ध्यान दें कि आपका वर्तमान कोड उचित नई लाइनों का उपयोग नहीं कर रहा है, उदाहरण के लिए नोटपैड में आप इसे एक लंबी लाइन के रूप में देखेंगे। नई नई पंक्तियाँ रखने के लिए कोड को इसमें बदलें:

string csv = string.Format("{0},{1}{2}", first, image, Environment.NewLine);

2
@Rajat नहीं, यह आपके चित्र डेटा के ठीक बाद नई पंक्ति वर्ण लिखेगा।
शैडो विजार्ड ईयर फॉर यू

7

पहिए को सुदृढ़ करने के बजाय एक पुस्तकालय का उपयोग किया जा सकता था। CsvHelperसीएसवी फ़ाइलों को बनाने और पढ़ने के लिए बहुत अच्छा है। यह पढ़ा और लिखा हुआ ऑपरेशन स्ट्रीम आधारित है और इसलिए बड़ी मात्रा में डेटा के साथ संचालन का समर्थन भी करता है।


आप अपना सीएसवी निम्नलिखित की तरह लिख सकते हैं।

using(var textWriter = new StreamWriter(@"C:\mypath\myfile.csv"))
{
    var writer = new CsvWriter(textWriter, CultureInfo.InvariantCulture);
    writer.Configuration.Delimiter = ",";

    foreach (var item in list)
    {
        writer.WriteField( "a" );
        writer.WriteField( 2 );
        writer.WriteField( true );
        writer.NextRecord();
    }
}

जैसा कि पुस्तकालय प्रतिबिंब का उपयोग कर रहा है यह किसी भी प्रकार को ले जाएगा और इसे सीधे पार्स करेगा।

public class CsvRow
{
    public string Column1 { get; set; }
    public bool Column2 { get; set; }

    public CsvRow(string column1, bool column2)
    {
        Column1 = column1;
        Column2 = column2;
    }
}

IEnumerable<CsvRow> rows = new [] {
    new CsvRow("value1", true),
    new CsvRow("value2", false)
};
using(var textWriter = new StreamWriter(@"C:\mypath\myfile.csv")
{
    var writer = new CsvWriter(textWriter, CultureInfo.InvariantCulture);
    writer.Configuration.Delimiter = ",";
    writer.WriteRecords(rows);
}

मान 1, सच

मान 2, झूठी


यदि आप लाइब्रेरी कॉन्फ़िगरेशन और संभावनाओं के बारे में अधिक पढ़ना चाहते हैं, तो आप यहां ऐसा कर सकते हैं ।


इस काम के लिए आपको StreamInriter को CultureInfo पास करना होगा।
अलिफ़

6
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Configuration;
using System.Data.SqlClient;

public partial class CS : System.Web.UI.Page
{
    protected void ExportCSV(object sender, EventArgs e)
    {
        string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT * FROM Customers"))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    using (DataTable dt = new DataTable())
                    {
                        sda.Fill(dt);

                        //Build the CSV file data as a Comma separated string.
                        string csv = string.Empty;

                        foreach (DataColumn column in dt.Columns)
                        {
                            //Add the Header row for CSV file.
                            csv += column.ColumnName + ',';
                        }

                        //Add new line.
                        csv += "\r\n";

                        foreach (DataRow row in dt.Rows)
                        {
                            foreach (DataColumn column in dt.Columns)
                            {
                                //Add the Data rows.
                                csv += row[column.ColumnName].ToString().Replace(",", ";") + ',';
                            }

                            //Add new line.
                            csv += "\r\n";
                        }

                        //Download the CSV file.
                        Response.Clear();
                        Response.Buffer = true;
                        Response.AddHeader("content-disposition", "attachment;filename=SqlExport.csv");
                        Response.Charset = "";
                        Response.ContentType = "application/text";
                        Response.Output.Write(csv);
                        Response.Flush();
                        Response.End();
                    }
                }
            }
        }
    }
}

यहां कोई स्ट्रिंग-बिल्डर क्यों नहीं?
सीबकिट

1
इसे लिखने के लिए आपने किस RFC का उपयोग किया .Replace(",", ";") + ',' :?
vt100

यदि आप 20000
विक्रांत

3

कमांड संभालना

उपयोग करते समय मूल्यों के अंदर कॉमा को संभालने के लिए string.Format(...), निम्नलिखित ने मेरे लिए काम किया है:

var newLine = string.Format("\"{0}\",\"{1}\",\"{2}\"",
                              first,
                              second,
                              third                                    
                              );
csv.AppendLine(newLine);

इसलिए इसे जोहान के जवाब के साथ जोड़ना, यह इस तरह दिखेगा:

//before your loop
var csv = new StringBuilder();

//in your loop
  var first = reader[0].ToString();
  var second = image.ToString();
  //Suggestion made by KyleMit
  var newLine = string.Format("\"{0}\",\"{1}\"", first, second);
  csv.AppendLine(newLine);  

//after your loop
File.WriteAllText(filePath, csv.ToString());

CSV फ़ाइल लौटा रहा है

यदि आप किसी स्थान पर लिखने के बजाय फ़ाइल को वापस करना चाहते हैं, तो यह एक उदाहरण है कि मैंने इसे कैसे पूरा किया:

एक संग्रहीत प्रक्रिया से

public FileContentResults DownloadCSV()
{
  // I have a stored procedure that queries the information I need
  SqlConnection thisConnection = new SqlConnection("Data Source=sv12sql;User ID=UI_Readonly;Password=SuperSecure;Initial Catalog=DB_Name;Integrated Security=false");
  SqlCommand queryCommand = new SqlCommand("spc_GetInfoINeed", thisConnection);
  queryCommand.CommandType = CommandType.StoredProcedure;

  StringBuilder sbRtn = new StringBuilder();

  // If you want headers for your file
  var header = string.Format("\"{0}\",\"{1}\",\"{2}\"",
                             "Name",
                             "Address",
                             "Phone Number"
                            );
  sbRtn.AppendLine(header);

  // Open Database Connection
  thisConnection.Open();
  using (SqlDataReader rdr = queryCommand.ExecuteReader())
  {
    while (rdr.Read())
    {
      // rdr["COLUMN NAME"].ToString();
      var queryResults = string.Format("\"{0}\",\"{1}\",\"{2}\"",
                                        rdr["Name"].ToString(),
                                        rdr["Address"}.ToString(),
                                        rdr["Phone Number"].ToString()
                                       );
      sbRtn.AppendLine(queryResults);
    }
  }
  thisConnection.Close();

  return File(new System.Text.UTF8Encoding().GetBytes(sbRtn.ToString()), "text/csv", "FileName.csv");
}

एक सूची से

/* To help illustrate */
public static List<Person> list = new List<Person>();

/* To help illustrate */
public class Person
{
  public string name;
  public string address;
  public string phoneNumber;
}

/* The important part */
public FileContentResults DownloadCSV()
{
  StringBuilder sbRtn = new StringBuilder();

  // If you want headers for your file
  var header = string.Format("\"{0}\",\"{1}\",\"{2}\"",
                             "Name",
                             "Address",
                             "Phone Number"
                            );
  sbRtn.AppendLine(header);

  foreach (var item in list)
  {
      var listResults = string.Format("\"{0}\",\"{1}\",\"{2}\"",
                                        item.name,
                                        item.address,
                                        item.phoneNumber
                                       );
      sbRtn.AppendLine(listResults);
    }
  }

  return File(new System.Text.UTF8Encoding().GetBytes(sbRtn.ToString()), "text/csv", "FileName.csv");
}

उम्मीद है कि यह उपयोगी है।


2

यह सी # का उपयोग करके सीएसवी फाइलें बनाने पर एक सरल ट्यूटोरियल है जिसे आप अपनी आवश्यकताओं के अनुसार फिट और संपादित कर पाएंगे।

सबसे पहले आपको एक नया विज़ुअल स्टूडियो सी # कंसोल एप्लिकेशन बनाने की आवश्यकता होगी, ऐसा करने के लिए निम्नलिखित चरण हैं।

उदाहरण कोड आपके द्वारा निर्दिष्ट स्थान में MyTest.csv नामक एक सीएसवी फ़ाइल बनाएगा। फ़ाइल की सामग्री पहले 3 पंक्तियों में पाठ के साथ 3 नामित कॉलम होनी चाहिए।

https://tidbytez.com/2018/02/06/how-to-create-a-csv-file-with-c/

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

namespace CreateCsv
{
    class Program
    {
        static void Main()
        {
            // Set the path and filename variable "path", filename being MyTest.csv in this example.
            // Change SomeGuy for your username.
            string path = @"C:\Users\SomeGuy\Desktop\MyTest.csv";

            // Set the variable "delimiter" to ", ".
            string delimiter = ", ";

            // This text is added only once to the file.
            if (!File.Exists(path))
            {
                // Create a file to write to.
                string createText = "Column 1 Name" + delimiter + "Column 2 Name" + delimiter + "Column 3 Name" + delimiter + Environment.NewLine;
                File.WriteAllText(path, createText);
            }

            // This text is always added, making the file longer over time
            // if it is not deleted.
            string appendText = "This is text for Column 1" + delimiter + "This is text for Column 2" + delimiter + "This is text for Column 3" + delimiter + Environment.NewLine;
            File.AppendAllText(path, appendText);

            // Open the file to read from.
            string readText = File.ReadAllText(path);
            Console.WriteLine(readText);
        }
    }
}

2
किसी समाधान का लिंक स्वागत योग्य है, लेकिन कृपया सुनिश्चित करें कि आपका उत्तर इसके बिना उपयोगी है: लिंक के चारों ओर संदर्भ जोड़ें ताकि आपके साथी उपयोगकर्ताओं को कुछ पता चले कि यह क्या है और यह क्यों है, तो पृष्ठ के सबसे प्रासंगिक हिस्से को उद्धृत करें ' लक्ष्य पृष्ठ अनुपलब्ध होने की स्थिति में पुनः लिंक करना। एक लिंक से थोड़ा अधिक उत्तर देने वाले उत्तर हटाए जा सकते हैं।
श्री

ओह समझा। प्रतिक्रिया के लिए धन्यवाद। मैंने परिवर्तन हाइलाइट किए हैं। कृपया वोट करें।
ब्लॉग्स

0

आपको बस एक पंक्ति फ़ीड जोड़ना पड़ सकता है "\n\r"


0

सीएसवी फ़ाइल आसानी से बनाने के लिए एक और ओपन सोर्स लाइब्रेरी है, सेंचू ईटीएल

List<dynamic> objs = new List<dynamic>();

dynamic rec1 = new ExpandoObject();
rec1.Id = 10;
rec1.Name = @"Mark";
rec1.JoinedDate = new DateTime(2001, 2, 2);
rec1.IsActive = true;
rec1.Salary = new ChoCurrency(100000);
objs.Add(rec1);

dynamic rec2 = new ExpandoObject();
rec2.Id = 200;
rec2.Name = "Tom";
rec2.JoinedDate = new DateTime(1990, 10, 23);
rec2.IsActive = false;
rec2.Salary = new ChoCurrency(150000);
objs.Add(rec2);

using (var parser = new ChoCSVWriter("emp.csv").WithFirstLineHeader())
{
    parser.Write(objs);
}

अधिक जानकारी के लिए, कृपया उपयोग पर CodeProject लेख पढ़ें ।


0

अधिलेखित समस्या से छुटकारा पाने का एक सरल तरीका यह File.AppendTextहै कि फ़ाइल के अंत में परिशिष्ट रेखा का उपयोग किया जाए

void Main()
{
    using (System.IO.StreamWriter sw = System.IO.File.AppendText("file.txt"))
    {          
        string first = reader[0].ToString();
        string second=image.ToString();
        string csv = string.Format("{0},{1}\n", first, second);
        sw.WriteLine(csv);
    }
} 

0
enter code here

string string_value = string.Empty;

        for (int i = 0; i < ur_grid.Rows.Count; i++)
        {
            for (int j = 0; j < ur_grid.Rows[i].Cells.Count; j++)
            {
                if (!string.IsNullOrEmpty(ur_grid.Rows[i].Cells[j].Text.ToString()))
                {
                    if (j > 0)
                        string_value= string_value+ "," + ur_grid.Rows[i].Cells[j].Text.ToString();
                    else
                    {
                        if (string.IsNullOrEmpty(string_value))
                            string_value= ur_grid.Rows[i].Cells[j].Text.ToString();
                        else
                            string_value= string_value+ Environment.NewLine + ur_grid.Rows[i].Cells[j].Text.ToString();
                    }
                }
            }
        }


        string where_to_save_file = @"d:\location\Files\sample.csv";
        File.WriteAllText(where_to_save_file, string_value);

        string server_path = "/site/Files/sample.csv";
        Response.ContentType = ContentType;
        Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(server_path));
        Response.WriteFile(server_path);
        Response.End();

0
public static class Extensions
{
    public static void WriteCSVLine(this StreamWriter writer, IEnumerable<string> fields)
    {
        const string q = @"""";
        writer.WriteLine(string.Join(",",
            fields.Select(
                v => (v.Contains(',') || v.Contains('"') || v.Contains('\n') || v.Contains('\r')) ? $"{q}{v.Replace(q, q + q)}{q}" : v
                )));
    }

    public static void WriteFields(this StreamWriter writer, params string[] fields) => WriteFields(writer, (IEnumerable<string>)fields);
}

यह आपको काफी सरलता से एक सीएसवी फ़ाइल लिखने की अनुमति देनी चाहिए। उपयोग:

StreamWriter writer = new StreamWriter("myfile.csv");
writer.WriteCSVLine(new[]{"A", "B"});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.