CSV ফাইল আমদানি

আমি বুঝতে পারি এটি একটি নবাগত প্রশ্ন, কিন্তু আমি একটি সহজ সমাধান খুঁজছি - মনে হচ্ছে সেখানে এক হতে হবে।

একটি দৃঢ়ভাবে টাইপ ডাটা গঠন মধ্যে একটি CSV ফাইল আমদানি করার সেরা উপায় কি? আবার সহজ = ভাল

0
এই বিবেচনা 1103495 এর চেয়ে একটি বছর আগে তৈরি করা হয়েছিল, আমি মনে করি যে এই প্রশ্নটি এর একটি ডুপ্লিকেট।
যোগ লেখক MattH, উৎস
যোগ লেখক Mark Meuer, উৎস
ধন্যবাদ, ম্যাট আমি শুধু তাদের একসঙ্গে লিঙ্ক করার চেষ্টা করছিলাম, কোনটি প্রথম আসে না তা নির্দেশ করে না। আপনি দেখবেন আমি এই প্রশ্নে অন্য প্রশ্নকারীর ঠিক একই পাঠ্য আছে। দুইটি প্রশ্ন একসাথে টাইপ করার একটি ভাল উপায় আছে কি?
যোগ লেখক Mark Meuer, উৎস

12 উত্তর

যদি আপনি গ্যারান্টি দিতে পারেন যে ডেটাতে কোন কমা নেই, তাহলে সম্ভবত সবচেয়ে সহজ উপায়টি হতে পারে String.split

উদাহরণ স্বরূপ:

String[] values = myString.Split(',');
myObject.StringField = values[0];
myObject.IntField = Int32.Parse(values[1]);

আপনার সাহায্য করতে পারে এমন লাইব্রেরিগুলি থাকতে পারে, তবে সম্ভবত এটি সহজেই আপনি পেতে পারেন। শুধু তথ্য আপনি কমা না থাকতে পারে নিশ্চিত করুন, অন্যথায় আপনি এটি ভাল পার্স প্রয়োজন হবে।

0
যোগ
মেমরি ব্যবহারের খুব খারাপ এবং ওভারহেড প্রচুর। ছোট কিছু কিলোবাইট ধন্যবাদ কম করা উচিত। একটি 10mb সিএসভি জন্য নিখুঁত না ভাল!
যোগ লেখক ppumkin, উৎস
এটি একটি অনুকূল সমাধান নয়
যোগ লেখক roundcrisis, উৎস
এটি আপনার স্মৃতি এবং ফাইলের আকারের উপর নির্ভর করে।
যোগ লেখক tonymiao, উৎস

ব্রায়ান একটি দৃঢ় টাইপ সংগ্রহ এটি রূপান্তর করার জন্য একটি চমৎকার সমাধান দেয়।

দেওয়া সর্বাধিক CSV পার্সিং পদ্ধতিগুলি ক্ষেত্র থেকে পালানো বা সিএসভি ফাইলগুলির অন্যান্য উপাংশগুলি (যেমন ছাঁটাইয়ের ক্ষেত্র) থেকে কিছু অংশ গ্রহণ করে না। এখানে ব্যক্তিগতভাবে আমি ব্যবহার কোড। এটি প্রান্তের কাছাকাছি একটি বিট রুক্ষ এবং বেশ কিছু ত্রুটি রিপোর্টিং আছে।

public static IList> Parse(string content)
{
    IList> records = new List>();

    StringReader stringReader = new StringReader(content);

    bool inQoutedString = false;
    IList record = new List();
    StringBuilder fieldBuilder = new StringBuilder();
    while (stringReader.Peek() != -1)
    {
        char readChar = (char)stringReader.Read();

        if (readChar == '\n' || (readChar == '\r' && stringReader.Peek() == '\n'))
        {
            // If it's a \r\n combo consume the \n part and throw it away.
            if (readChar == '\r')
            {
                stringReader.Read();
            }

            if (inQoutedString)
            {
                if (readChar == '\r')
                {
                    fieldBuilder.Append('\r');
                }
                fieldBuilder.Append('\n');
            }
            else
            {
                record.Add(fieldBuilder.ToString().TrimEnd());
                fieldBuilder = new StringBuilder();

                records.Add(record);
                record = new List();

                inQoutedString = false;
            }
        }
        else if (fieldBuilder.Length == 0 && !inQoutedString)
        {
            if (char.IsWhiteSpace(readChar))
            {
                // Ignore leading whitespace
            }
            else if (readChar == '"')
            {
                inQoutedString = true;
            }
            else if (readChar == ',')
            {
                record.Add(fieldBuilder.ToString().TrimEnd());
                fieldBuilder = new StringBuilder();
            }
            else
            {
                fieldBuilder.Append(readChar);
            }
        }
        else if (readChar == ',')
        {
            if (inQoutedString)
            {
                fieldBuilder.Append(',');
            }
            else
            {
                record.Add(fieldBuilder.ToString().TrimEnd());
                fieldBuilder = new StringBuilder();
            }
        }
        else if (readChar == '"')
        {
            if (inQoutedString)
            {
                if (stringReader.Peek() == '"')
                {
                    stringReader.Read();
                    fieldBuilder.Append('"');
                }
                else
                {
                    inQoutedString = false;
                }
            }
            else
            {
                fieldBuilder.Append(readChar);
            }
        }
        else
        {
            fieldBuilder.Append(readChar);
        }
    }
    record.Add(fieldBuilder.ToString().TrimEnd());
    records.Add(record);

    return records;
}

লক্ষ্য করুন যে এটি ক্ষেত্রগুলির প্রান্তের ক্ষেত্রে ডাবল উদ্ধৃতি দ্বারা বিভক্ত না হ্যান্ডেল করে না, কিন্তু মেহেরেল এটির একটি উদ্ধৃত স্ট্রিং ধারণ করে। আরও ভাল এক্সটেনশন এর পাশাপাশি কিছু লিঙ্কের জন্য এই পোস্ট দেখুন কিছু সঠিক লাইব্রেরি

0
যোগ

CodeProject এ দুটি নিবন্ধ রয়েছে যা সমাধান জন্য কোড প্রদান করে, যেটি স্ট্রীম রিডার ব্যবহার করে। > এবং CSV ডেটা আমদানি করে যেটি এক। //support.microsoft.com/kb/187670 "rel =" nofollow noreferrer "> মাইক্রোসফ্ট পাঠ্য ড্রাইভার

0
যোগ

যদি আপনি CSV পার্সিংয়ের জন্য মোটামুটি জটিল পরিস্থিতিতে আশা করছেন, আমাদের নিজস্ব পার্সার রোলিং নাও ভাবুন সেখানে অনেক চমৎকার সরঞ্জাম রয়েছে, যেমন FileHelpers , অথবা এমনকি CodeProject

বিন্দু হল এই একটি মোটামুটি সাধারণ সমস্যা এবং আপনি বাজি করতে পারেন যে সফ্টওয়্যার ডেভেলপারদের অনেক ইতোমধ্যে চিন্তাভাবনা করেছে এবং এই সমস্যার সমাধান করেছে।

0
যোগ
ধন্যবাদ @ টেকস্পাইডার, আমি আশা করি আপনি এই নোটটি স্ট্যাকঅভারফ্লোের বিটা সময় থেকে লিখেছেন: D যে আজকে বলা হচ্ছে আজকের CSV সরঞ্জামগুলিকে Nuget প্যাকেজগুলি থেকে ভাল সরবরাহ করা হয়েছে - তাই আমি নিশ্চিত নই যদি লিঙ্কগুলি 8-বছরের প্রযুক্তির বিবর্তন চক্র
যোগ লেখক Jon Limjap, উৎস
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, এখানে উত্তরটির অপরিহার্য অংশগুলি অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্ক প্রদান করা আরও ভাল। সংযুক্ত পৃষ্ঠা পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তর অবৈধ হতে পারে। - পর্যালোচনা থেকে
যোগ লেখক techspider, উৎস
0
যোগ
+1 ঠিক এই বাস্তব ... ভয়ঙ্কর
যোগ লেখক Miyagi Coder, উৎস
@ ড্যাংফ আমি মনে করি না যে এটা বেশ সত্য। opensource.org/licenses/lgpl-2.1.php "তবে, লিঙ্ক করা লাইব্রেরী সহ "লাইব্রেরি ব্যবহার করে এমন একটি কর্ম" একটি এক্সিকিউটেবল তৈরি করে যা লাইব্রেরির একটি ডেরিভেটিভ তৈরি করে। এক্সিকিউটেবলটি তাই এই লাইসেন্স দ্বারা আচ্ছাদিত। ধারা 6 এভাবে এই ধরনের এক্সেকিউটেবলের বন্টন করার কথা বলে। "
যোগ লেখক RYFN, উৎস
@ ড্যাংফ আমি সম্মত হচ্ছি, আমি নিশ্চিত নই এটা কি করতে হবে!
যোগ লেখক RYFN, উৎস
@ জন, কেন আপনি বলছেন? এলজিপিএল যদি আপনার লাইব্রেরির পরিবর্তন না করেই আপনি কোনও কোড প্রকাশ করতে চান না। (যে ক্ষেত্রে এটি একটি প্যাচ যাইহোক জমা দিতে হবে।)
যোগ লেখক dan-gph, উৎস
@ শেইস, আমি এখনও মনে করি না যে আপনার "লাইব্রেরি ব্যবহার করে যে কাজ" তার উৎসটি প্রকাশ করতে হবে। আপনাকে "অবজেক্ট কোড এবং / অথবা উৎস কোড" প্রকাশ করতে হবে। আমি নিশ্চিত নই একটি। নেট পরিবেশে মানে কি। কিন্তু আপনি ঠিক আছে। ধারা 6 এর প্রয়োজনীয়তা অত্যন্ত মারাত্মক। কি একটি হাস্যকর লাইসেন্স
যোগ লেখক dan-gph, উৎস
FileHelpers এর সাথে আরেকটি সমস্যা হল যে এটি সম্পর্কে উন্নয়নটি 2007 সাল থেকে সম্পূর্ণরূপে বন্ধ হয়ে গেছে বলে মনে হয়। এবং দুর্ভাগ্যবশত এটি বাগ রয়েছে (সম্ভবত এটি সহজ ক্ষেত্রে জরিমানা কাজ করবে।) যদিও এটি ওপেন সোর্স, এটি স্পষ্ট নয় যে লেখক প্যাচ গ্রহণ করছেন।
যোগ লেখক dan-gph, উৎস
দুর্ভাগ্যবশত এটি হল এলজিপিএল, যা কর্পোরেট পরিবেশে আদর্শের চেয়ে কম।
যোগ লেখক John Weldon, উৎস
তুলনা জন্য, NHibernate হয় এলজিপিএল এবং এটি অগণিত বাণিজ্যিক অ্যাপ্লিকেশান ব্যবহার করা হয়েছে তাই চিন্তা করার কিছুই নেই
যোগ লেখক Mauricio Scheffer, উৎস
@ ড্যাংফ @ জুস @ জোহান @ মার্টিন সেকশন 6-বি বলে যে আপনি "লাইব্রেরির সাথে যুক্ত করার জন্য একটি যথাযথ শেয়ার্ড লাইব্রেরি ব্যবস্থার ব্যবহার করতে পারবেন। একটি উপযুক্ত ব্যবস্থা এক (1) চালানোর সময় ব্যবহার করে লাইব্রেরির একটি কপি ইতিমধ্যে উপস্থিত রয়েছে। ব্যবহারকারীর কম্পিউটার সিস্টেম, এক্সিকিউটেবলের লাইব্রেরি ফাংশনগুলি অনুলিপি করার পরিবর্তে এবং (2) লাইব্রেরির একটি সংশোধিত সংস্করণের সাথে সঠিকভাবে কাজ করবে, যদি ব্যবহারকারী এক ইনস্টল করে থাকেন, তবে যতদিন পরিবর্তিত সংস্করণটি সংস্করণের সাথে ইন্টারফেস-সংকলন কাজ করে সঙ্গে তৈরি করা হয়েছিল। " একটি। নোট DLL সমাবেশ পূরণ করে যারা মানদণ্ড এবং আপনার নিজের উৎস ম
যোগ লেখক MarkJ, উৎস
এই আইন বৈধতা এই আলোচনার কারণ যথেষ্ট জটিল হয় যে সম্ভবত অনেক মানুষের জন্য এটি শাসন আউট। এটি অবশ্যই দেখায় যে পরিস্থিতি অনিশ্চিত। পরিস্থিতি যাচাই করতে বেশিরভাগ লোকের কাছে "লেগাল টিম" পেতে সময় বা অর্থ নেই। যে বলেন, যদি আপনি একটি প্যাকেজ সমাধান জাহাজ জাহাজে লোকেদের মধ্যে 1000s থেকে Liberation অন্তর্ভুক্ত করা যাচ্ছে না, এটা অসম্ভাব্য যে কেউই লাইব্রেরীকে কোনওভাবেই বাধ্য করবে।
যোগ লেখক Martin Brown, উৎস
FileHelpers হোমপৃষ্ঠা বলেছেন: "ফাইল হেলপার্স লাইব্রেরীটি @ কপিরাইট ২005-2006 মার্কস মেলি কিন্তু এটি সোর্স কোড এবং বাইনারি বাণিজ্যিক এবং অ বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে।"
যোগ লেখক Carl Hörberg, উৎস

এটি করার জন্য একটি ভাল সহজ উপায় ফাইলটি খুলুন, এবং প্রতিটি লাইনটি একটি অ্যারে, লিঙ্ক তালিকা, ডাটা-গঠন-এর-আপনার-পছন্দে পড়তে হয়। যদিও প্রথম লাইন পরিচালনা সম্পর্কে সতর্ক থাকুন।

এটি আপনার মাথার উপরে হতে পারে, তবে একটি সংযোগ স্ট্রিং

কেন সি # বা ভিবি পরিবর্তে পাইথন ব্যবহার করার চেষ্টা করবেন না? এটি একটি চমৎকার CSV মডিউল আছে যা আপনার জন্য সমস্ত ভারী উদ্ধরণ করে।

0
যোগ
একটি সিএসভি পার্সারের জন্য ভিবি থেকে পাইথন পর্যন্ত ঝাঁপ না। ভিবিতে এক আছে যদিও এই প্রশ্নটির উত্তরগুলিতে অদ্ভুতভাবে এটি উপেক্ষা করা হয়েছে বলে মনে করা হচ্ছে। msdn.microsoft.com/en-us/library/ করছে & hellip;
যোগ লেখক MarkJ, উৎস

আমি @ আমার মত নয় এর সাথে একমত। FileHelpers ভালভাবে পরীক্ষিত এবং সব ধরনের প্রান্তের ক্ষেত্রে পরিচালনা করে যা আপনি শেষ পর্যন্ত আপনার সাথে মোকাবিলা করতে পারেন এটা নিজেকে ফাইলার্সেলারস কি করে তা দেখুন এবং শুধুমাত্র আপনার নিজের লিখুন যদি আপনি একেবারেই নিশ্চিত হন যে (1) আপনি এজেন্ডা ক্ষেত্রে ফাইল হেলপারগুলি পরিচালনা করতে হবে না, অথবা (2) আপনি এই ধরণের স্টাফ লেখেন এবং যাচ্ছেন যখন আপনি এই ধরনের জিনিস প্যাড করতে হবে:

1, "বিল", "স্মিথ", "সুপারভাইজার", "কোনও মন্তব্য নেই"

2, 'ড্রেক', 'ও'মাললি', 'জানিটর,

ওহো, আমি উদ্ধৃত করছি না এবং আমি একটি নতুন লাইন!

0
যোগ

আমি বিরক্ত ছিল তাই আমি কিছু জিনিস সংশোধন করা হয়েছে আমি লিখেছি। ফাইলের মাধ্যমে পুনরাবৃত্তির পরিমাণ কমানোর জন্য একটি OO পদ্ধতিতে প্যাশিংকে অন্তর্ভুক্ত করার চেষ্টা করে, এটি শুধুমাত্র উপরের foreach এ একবার বারবার আসে।

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace ConsoleApplication1
{
    class Program
    {

        static void Main(string[] args)
        {

            // usage:

            // note this wont run as getting streams is not Implemented

            // but will get you started

            CSVFileParser fileParser = new CSVFileParser();

            // TO Do:  configure fileparser

            PersonParser personParser = new PersonParser(fileParser);

            List persons = new List();
            // if the file is large and there is a good way to limit
            // without having to reparse the whole file you can use a 
            // linq query if you desire
            foreach (Person person in personParser.GetPersons())
            {
                persons.Add(person);
            }

            // now we have a list of Person objects
        }
    }

    public abstract  class CSVParser 
    {

        protected String[] deliniators = { "," };

        protected internal IEnumerable GetRecords()
        {

            Stream stream = GetStream();
            StreamReader reader = new StreamReader(stream);

            String[] aRecord;
            while (!reader.EndOfStream)
            {
                  aRecord = reader.ReadLine().Split(deliniators,
                   StringSplitOptions.None);

                yield return aRecord;
            }

        }

        protected abstract Stream GetStream(); 

    }

    public class CSVFileParser : CSVParser
    {
        // to do: add logic to get a stream from a file

        protected override Stream GetStream()
        {
            throw new NotImplementedException();
        } 
    }

    public class CSVWebParser : CSVParser
    {
        // to do: add logic to get a stream from a web request

        protected override Stream GetStream()
        {
            throw new NotImplementedException();
        }
    }

    public class Person
    {
        public String Name { get; set; }
        public String Address { get; set; }
        public DateTime DOB { get; set; }
    }

    public class PersonParser 
    {

        public PersonParser(CSVParser parser)
        {
            this.Parser = parser;
        }

        public CSVParser Parser { get; set; }

        public  IEnumerable GetPersons()
        {
            foreach (String[] record in this.Parser.GetRecords())
            {
                yield return new Person()
                {
                    Name = record[0],
                    Address = record[1],
                    DOB = DateTime.Parse(record[2]),
                };
            }
        }
    }
}
0
যোগ

একটি OleDB সংযোগ ব্যবহার করুন।

String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\InputDirectory\\;Extended Properties='text;HDR=Yes;FMT=Delimited'";
OleDbConnection objConn = new OleDbConnection(sConnectionString);
objConn.Open();
DataTable dt = new DataTable();
OleDbCommand objCmdSelect = new OleDbCommand("SELECT * FROM file.csv", objConn);
OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();
objAdapter1.SelectCommand = objCmdSelect;
objAdapter1.Fill(dt);
objConn.Close();
0
যোগ
এর জন্য ফাইল সিস্টেম অ্যাক্সেস প্রয়োজন। যতদূর জানি আমি অ-মেমরি স্ট্রিমের সাথে OLEDB কাজ করার কোন উপায় নেই :(
যোগ লেখক UserControl, উৎস
আমি অভিযোগ করছি না. আসলে আমি বাকিদের উপর OLEDB সমাধান পছন্দ করি কিন্তু ASP.NET অ্যাপ্লিকেশনে সিএসভি পাঠানোর প্রয়োজনে আমি অনেকবার হতাশ হয়েছি তাই এটি মনে রাখতে চাই।
যোগ লেখক UserControl, উৎস
@ ইউজার কন্ট্রোল, অবশ্যই ফাইল সিস্টেম অ্যাক্সেস প্রয়োজন। তিনি একটি CSV ফাইল আমদানি সম্পর্কে জিজ্ঞাসা
যোগ লেখক Kevin, উৎস

মাইক্রোসফটের টেক্সটফিল্ড পার্সার স্থিত এবং স্থিত CSF ফাইলগুলির জন্য RFC 4180 Microsoft.VisualBasic নামস্থান দ্বারা বন্ধ করা হবে না; এটি .NET ফ্রেমওয়ার্কের একটি আদর্শ উপাদান, শুধু বিশ্বব্যাপী Microsoft.VisualBasic সমাবেশের একটি রেফারেন্স যোগ করুন

যদি আপনি উইন্ডোজ (মোনো এর বিপরীত) এর জন্য কম্পাইলিং করছেন এবং "ভাঙা" (অ- RFC- অনুবর্তী) CSV ফাইলগুলিকে বিশ্লেষণ করতে অনুমান করবেন না তবে এটি স্পষ্ট পছন্দ হবে, যেহেতু এটি বিনামূল্যে, অবাধ, স্থিতিশীল, এবং সক্রিয়ভাবে সমর্থিত, যা বেশিরভাগ ক্ষেত্রে FileHelpers এর জন্য বলা যাবে না।

এছাড়াও দেখুন: কিভাবে: ভিসুয়াল বেসিকে কমা-সীমাবদ্ধ পাঠ্য ফাইল থেকে পড়ুন একটি VB কোড উদাহরণ জন্য

0
যোগ
TextFieldParser ট্যাব-সীমাবদ্ধ এবং অন্যান্য অদ্ভুত এক্সেল-উত্পাদিত cruft জন্য কাজ করবে। আমি বুঝতে পারি যে আপনার পূর্ববর্তী উত্তরটি লাইব্রেরিটি VB- নির্দিষ্ট ছিল না, এটি কেবলমাত্র আমার কাছে এসেছিল যেটি বোঝাচ্ছে যে এটি সত্যিই অর্থ VB এর জন্য এবং উদ্দেশ্যে নয় C# থেকে ব্যবহার করা হবে, যা আমার মনে হয় না - MSVB- এর কিছু সত্যিই দরকারী ক্লাস আছে।
যোগ লেখক Aaronaught, উৎস
এরকম দুর্ভাগ্যবশত নামধারী নাম ছাড়াও এই বর্গটি সম্পর্কে VB- নির্দিষ্ট কিছু নেই। আমি কেবলমাত্র একটি "সহজ" CSV পার্সার প্রয়োজন হলে আমি স্পষ্টতই এই লাইব্রেরিটি বেছে নেব, কারণ সাধারণভাবে ডাউনলোড, বিতরণের বা উদ্বেগ সম্পর্কে কিছুই নেই এই শেষ পর্যন্ত আমি এই উত্তর থেকে VB- নিবদ্ধ phrasing সম্পাদনা করেছি।
যোগ লেখক Aaronaught, উৎস
@ আরাওন আমি মনে করি আপনার সম্পাদনা বেশিরভাগই একটি উন্নতি। যদিও যে RFC অগত্যা প্রাতিষ্ঠানিক নয়, তাই অনেক CSV লেখক এটি মেনে চলছেন না। এক্সেল সর্বদা "CSV" ফাইলগুলিতে একটি কমা ব্যবহার করে না। এছাড়াও আমার আগের উত্তরটি ইতিমধ্যে বলছে যে ক্লাসটি C# থেকে ব্যবহার করা যেতে পারে?
যোগ লেখক MarkJ, উৎস

আমি এই গ্রীষ্মে একটি প্রকল্পের জন্য .NET এ একটি CSV পার্সার ব্যবহার করতে হবে এবং মাইক্রোসফ্ট জেট টেক্সট ড্রাইভার এ নিষ্পত্তি। আপনি একটি সংযোগ স্ট্রিং ব্যবহার করে একটি ফোল্ডার নির্দিষ্ট করুন, তারপর একটি SQL নির্বাচন বিবৃতি ব্যবহার করে একটি ফাইল ক্যোয়ারী। আপনি একটি schema.ini ফাইল ব্যবহার করে শক্তিশালী ধরনের উল্লেখ করতে পারেন। আমি প্রথমে এই কাজ না, কিন্তু তারপর আমি খারাপ ফলাফল পেয়েছিলাম যেখানে তথ্য টাইপ তাত্ক্ষণিকভাবে ছিল না, যেমন আইপি সংখ্যা বা "XYQ 3.9 SP1" মত একটি এন্ট্রি।

এক সীমাবদ্ধতা আমি আগত যে এটি 64 অক্ষর উপরে কলাম নামগুলি পরিচালনা করতে পারে না; এটা কাঁটা এটি একটি সমস্যা হতে পারে না, আমি খুব খারাপভাবে পরিকল্পিত ইনপুট ডেটা সঙ্গে ডিলিং ছিল না ছাড়া এটি একটি ADO.NET DataSet ফেরৎ।

এই আমি পাওয়া সেরা সমাধান ছিল। আমি আমার নিজের CSV পার্সার রোলিং থেকে সতর্ক হতে হবে, আমি সম্ভবত শেষ কিছু কিছু মিস্ হবে, এবং আমি অন্য কোন বিনামূল্যে CSV প্যাসিফিক প্যাকেজ খুঁজে পাওয়া যায় না।

সম্পাদনা করুন: এছাড়াও, কেবলমাত্র একটি ডিরেক্টরির জন্য schema.ini ফাইল থাকতে পারে, তাই আমি প্রয়োজনীয়ভাবে প্রয়োজনীয় কলামগুলি টাইপ করার জন্য গতিশীলভাবে সংযুক্ত করেছি। এটি শুধুমাত্র উল্লেখযোগ্য কলামগুলির জোরালোভাবে-টাইপ করবে, এবং কোনো অনির্দিষ্ট ক্ষেত্রের জন্য নির্ণয় করবে। আমি সত্যিই এই প্রশংসা করি, আমি একটি তরল 70+ কলাম CSV আমদানি সঙ্গে কাজ ছিল এবং প্রতিটি কলাম নির্দিষ্ট করতে চান না, শুধুমাত্র misbehaving বেশী

0
যোগ
কেন VB.NET CSV পার্সারে নির্মিত? msdn.microsoft.com/en-us/library/ করছে & hellip;
যোগ লেখক MarkJ, উৎস

আমি কিছু কোড টাইপ। Datagridviewer ফলাফল ভাল দেখানো। বস্তুর একটি অ্যারেলিস্টে এটি একটি একক রেখা পাঠ করে।

    enum quotestatus
    {
        none,
        firstquote,
        secondquote
    }
    public static System.Collections.ArrayList Parse(string line,string delimiter)
    {        
        System.Collections.ArrayList ar = new System.Collections.ArrayList();
        StringBuilder field = new StringBuilder();
        quotestatus status = quotestatus.none;
        foreach (char ch in line.ToCharArray())
        {                                
            string chOmsch = "char";
            if (ch == Convert.ToChar(delimiter))
            {
                if (status== quotestatus.firstquote)
                {
                    chOmsch = "char";
                }                         
                else
                {
                    chOmsch = "delimiter";                    
                }                    
            }

            if (ch == Convert.ToChar(34))
            {
                chOmsch = "quotes";           
                if (status == quotestatus.firstquote)
                {
                    status = quotestatus.secondquote;
                }
                if (status == quotestatus.none )
                {
                    status = quotestatus.firstquote;
                }
            }

            switch (chOmsch)
            {
                case "char":
                    field.Append(ch);
                    break;
                case "delimiter":                        
                    ar.Add(field.ToString());
                    field.Clear();
                    break;
                case "quotes":
                    if (status==quotestatus.firstquote)
                    {
                        field.Clear();                            
                    }
                    if (status== quotestatus.secondquote)
                    {                                                                           
                            status =quotestatus.none;                                
                    }                    
                    break;
            }
        }
        if (field.Length != 0)            
        {
            ar.Add(field.ToString());                
        }           
        return ar;
    }
0
যোগ