Загрузка файла с двойной цитатой в sting [duplicate]

Это может быть правдой, что:

  1. Кто-то использует каждую функцию языка / библиотеки, а
  2. . Переключение поведения здесь было бы непродуманным, но

полностью согласуется с обоими вышеперечисленными функциями и по-прежнему делает еще одну точку:

  1. Это запутанная функция, и это несчастливо в Python.

Другие ответы или, по крайней мере, некоторые из них либо делают точки 1 и 2, но не 3, либо делают точки 3 и нижние точки 1 и 2. Но все три являются истинными.

Возможно, что переключение лошадей в середине потока здесь потребует значительного поломки и что может возникнуть больше проблем, связанных с изменением Python, чтобы интуитивно обработать открывающий фрагмент Стефано. И это может быть правдой, что кто-то, кто хорошо знал внутренности Python, мог объяснить минные поля последствий. Однако

Существующее поведение не является Pythonic, а Python успешным, потому что очень мало о языке нарушает принцип наименьшего удивления где-нибудь возле , это плохо , Это настоящая проблема, было бы разумно ее искоренить. Это дефект дизайна. Если вы понимаете язык намного лучше, пытаясь проследить поведение, я могу сказать, что C ++ делает все это и многое другое; вы многому научитесь, перейдя, например, на тонкие ошибки указателя. Но это не Pythonic: людям, которые заботятся о Python достаточно, чтобы упорствовать перед лицом этого поведения, являются люди, которые тянутся к этому языку, потому что у Python гораздо меньше сюрпризов, чем на другом языке. Dabblers и любопытные становятся Pythonistas, когда они удивляются тому, как мало времени требуется, чтобы получить что-то работающее - не из-за дизайна fl - я имею в виду, скрытая логическая головоломка - которая урезает интуицию программистов, которые тянутся к Python потому что он просто работает.

8
задан topwik 7 July 2011 в 22:17
поделиться

5 ответов

Ничего себе, я ожидал, что смогу ответить «Просто установите спецификатор текста», но подумал, что вы уже попробовали бы это, поэтому я попробовал это, прежде чем ответить. Сюрприз, SSIS не поддерживает стандартные CSV-файлы!

Похоже, это общая жалоба . Существует один комментарий от Microsoft о некоторых примерах, которые могут помочь; Вот проект codeplex , они упомянули, что пример источника плоского файла с регулярным выражением и образец источника с разделителями файлов в частности могут помочь - я предполагаю, что файл с разделителями файлов будет более полезен.

4
ответ дан Chris Shaffer 20 August 2018 в 20:39
поделиться

Этот ответ не применим к 2005 году, как указано здесь, но в случае, если кто-то сталкивается с этим во время поиска и использует 2008 год, у этого другого вопроса есть рабочий ответ: SSIS 2008 и Undouble

1
ответ дан Community 20 August 2018 в 20:39
поделиться

Существует обходное решение, если в соединении с файлом вы удаляете «как текстовый классификатор», вы можете удалить все двойные кавычки позже с производным выражением столбца REPLACE (Item_Name, «\» »,« »). Недостатком является то, что вам нужно будет сделать это для каждого поля

0
ответ дан Omar Fernandez 20 August 2018 в 20:39
поделиться

Вероятно, старые новости сейчас, но эта проблема была исправлена ​​в SQL Server 2012. Я смог импортировать тот же файл на сервере 2012 года, который был неудачен на моем сервере 2008 года.

-1
ответ дан Richard Thomas 20 August 2018 в 20:39
поделиться
  • 1
    Нет, он еще не работает в 2017 году (с SQL Server 2016 и VS2015) – MSBI-Geek 4 October 2017 в 16:02

Вчера я столкнулся с подобной проблемой. Мы получили файл csv, который использует запятую (,) как разделитель и двойную кавычку (") в качестве текстового классификатора, но есть поле, содержащее двойную кавычку в двойной кавычки (неэкранированная двойная кавычка внутри строки). Проведя половину дневного поиска , придумал решение ниже,

var fileContent = File.ReadAllLines(fullFilePath); //load the file into a one dimensional string array. fullFilePath is the full path + the file name. var fileContentUpdated = fileContent.Select(x => new Regex(@"(?<!^)(?<!\,)""(?!\,)(?!$)").Replace(x, "'")).ToArray(); //this line here finds the double quote within the double quote and replace it with single quote File.WriteAllLines(fullFilePath, fileContentUpdated); //write the string array into the csv file.

Я не вижу другого способа, кроме замены двойной цитаты чем-то другим, чтобы избежать проблемы.

2
ответ дан user1968485 20 August 2018 в 20:39
поделиться
  • 1
    Спасибо за ваши усилия, работая как драгоценный камень – Srinivasa Rao 16 May 2018 в 11:16
Другие вопросы по тегам:

Похожие вопросы: