Если вы используете Linux-систему, вам нужно добавить
using namespace std;
Ниже заголовков
Если в окнах убедитесь, что вы правильно помещаете заголовки #include<iostream.h>
#include<string.h>
Обратитесь к этому, чтобы он работал отлично.
#include <iostream>
#include <string>
int main ()
{
std::string str="We think in generalities, but we live in details.";
// (quoting Alfred N. Whitehead)
std::string str2 = str.substr (3,5); // "think"
std::size_t pos = str.find("live"); // position of "live" in str
std::string str3 = str.substr (pos);
// get from "live" to the end
std::cout << str2 << ' ' << str3 << '\n';
return 0;
}
Вы можете разделить все запятые, которые имеют четное количество кавычек после них, используя следующий Regex для их поиска:
",(?=(?:[^']*'[^']*')*[^']*$)"
Вы будете использовать его как
var result = Regex.Split(samplestring, ",(?=(?:[^']*'[^']*')*[^']*$)");
Попробуйте (взломанный у Дженса) в методе split:
",(?:.*?'[^']*?')"
или просто добавьте вопросительные знаки после * Дженса, это делает его ленивым, а не жадным.
хотя я тоже иногда люблю сложности, но это не вызов. пожалуйста, прочитайте эту статью http://secretgeek.net/csv_trouble.asp http://www.filehelpers.com/
[Edit1, 3]: или, возможно, эта статья тоже может помочь (в ссылке показан только пример кода для VB.Net, но, тем не менее, вы можете использовать его и на C#!) http://msdn.microsoft.com/en-us/library/cakac7e6.aspx
Я пытался сделать пример для C# (добавьте ссылку на Microsoft.VisualBasic в ваш проект)
using System;
using System.IO;
using Microsoft.VisualBasic.FileIO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
TextReader reader = new StringReader("('ABCDEFG', 123542, 'XYZ 99,9')");
TextFieldParser fieldParser = new TextFieldParser(reader);
fieldParser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
fieldParser.SetDelimiters(",");
String[] currentRow;
while (!fieldParser.EndOfData)
{
try
{
currentRow = fieldParser.ReadFields();
foreach(String currentField in currentRow)
{
Console.WriteLine(currentField);
}
}
catch (MalformedLineException e)
{
Console.WriteLine("Line {0} is not valid and will be skipped.", e);
}
}
}
}
}
[Edit2]: нашел еще один, который может быть полезен здесь: http://www.codeproject.com/KB/database/CsvReader.aspx
-- reinhard