В версии 3.9, opencsv представил еще один синтаксический анализатор, в дополнение к CSVParser. Парсер лежит в основе CSVReader. Этот новый парсер называется RFC4180Parser. Официальная документация гласит
. RFC4180 определяет стандарт для всех самых простых вопросов о том, как именно файлы CSV должны быть отформатированы ...
Основное различие между CSVParser и RFC4180Parser заключается в том, что CSVParser использует escape-символ для обозначения «непечатных» символов, в то время как спецификация RFC4180 принимает все символы между первой и последней кавычками как евангелие (за исключением двойной кавычки). который избегается двойной кавычкой).
blockquote>Так что попробуйте использовать opencsv 3.9+ и RFC4180Parser. Это работает для меня
def parser = new RFC4180ParserBuilder().build() def reader = new CSVReaderBuilder(new FileReader(filename)).withCSVParser(parser).build(); println reader.readNext()
Вывод:
[value1, domain\user, value2]
Если по какой-то причине вы не можете использовать версию 3.9 и выше, вы можете настроить старый синтаксический анализатор так, чтобы экранирующий символ был некоторым другой персонаж вместо обратной косой черты. Но в этом случае существует риск вырвать другие строки из файла, если создатель исходного файла использует обратную косую черту в качестве escape-символа в соответствии с официальной документацией
... Иногда символ-разделитель включается в данные для самого поля, поэтому необходимо использовать кавычки. Эти кавычки также могут быть включены в данные, поэтому необходим экранирующий символ ...
blockquote>Поэтому я предлагаю использовать версию 3.9+ и RFC4180Parser
Я беру его, что Вы пытаетесь получить доступ к таблице, говорят Contact
это имеет внешний ключ SubscriberId
в нем теперь скажите, что Вы хотите добавить a Contact
с Внешним ключом 1, примером ниже вместо того, чтобы взломать далеко в edmx.
using (BulkSmsEntities ctx = new BulkSmsEntities())
{
int SubscriberId = 1;
tb_contact contact = new tb_contact();
contact.tb_subscriber = ctx.tb_subscriber
.First(a => a.SubscriberId == SubscriberId);
ctx.AddTotb_subscriber_contacts(contact);
ctx.SaveChanges();
}
http://www.thedatafarm.com/blog/2007/09/11/EntityDataModelAssociationsWheresMyForeignKey.aspx
Я нашел статью, описывающую ошибку в наших путях... в основном мы никогда не предполагали для запросов таблиц через внешние ключи, вместо этого проявляют немного больше реляционного подхода
(From o In nw.Orders
Where o.OrderID = 10281
Select o.Customers
).First