Экспорт текста твитов с несколькими строками в csv [duplicate]

В то время как , что вызывает NullReferenceExceptions и подходит к avoid / fix , такое исключение было рассмотрено в других ответах, что многие программисты не имеют " t узнал еще, как независимо отлаживать такие исключения во время разработки.

В Visual Studio это обычно легко благодаря Visual Studio Debugger .


Во-первых, убедитесь, что правильная ошибка будет обнаружена - см. . Как разрешить нарушение «Исключение System.NullReferenceException» в VS2010? Примечание1

Затем либо Начать с отладки (F5) , либо Приложить [отладчик VS] к запуску процесса . Иногда может быть полезно использовать Debugger.Break , в котором будет предложено запустить отладчик.

Теперь, когда NullReferenceException выбрано (или необработанно), отладчик остановится ( помните правило, указанное выше?) в строке, на которой произошло исключение. Иногда ошибка может быть легко обнаружена.

Например, в следующей строке единственный код, который может , вызывает исключение, если myString имеет значение null. Это можно проверить, посмотрев окно Watch или выполнив выражения в окне Immediate Window .

var x = myString.Trim();

В более сложных случаях, таких как следуя ниже, вам нужно будет использовать один из методов выше (Watch или Immediate Windows) для проверки выражений, чтобы определить, было ли str1 пустым или если str2 имеет значение null.

var x = str1.Trim() + str2.Trim();

Once , где было выбрано исключение, это обычно тривиально по отношению к разуму назад, чтобы выяснить, где введенное значение null было [неправильно] -

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


1 Если Break on Throws слишком агрессивен и отладчик останавливается на NPE в библиотеке .NET или сторонних разработчиков, Break на User-Unhandled можно использовать для ограничения выловленных исключений. Кроме того, VS2012 представляет Just My Code , который я рекомендую также включить.

Если вы отлаживаете с включенным Just My Code, поведение немного отличается. При включенном Just My Code отладчик игнорирует исключения, связанные с привилегиями обычного языка (CLR) первого шанса, которые выходят за пределы My Code и не проходят через My Code

blockquote>

135
задан Nir 23 August 2009 в 14:53
поделиться

17 ответов

У вас должны быть пробелы в начале полей ТОЛЬКО, где пробельные символы являются частью данных. Excel не будет удалять ведущие пробелы. Вы получите нежелательные пробелы в заголовках и полях данных. Хуже того, ", который должен «защищать» этот разрыв строки в третьем столбце, будет проигнорирован, потому что он не находится в начале поля.

Если у вас есть символы, отличные от ASCII (закодированные в UTF-8) в файле, вы должны иметь спецификацию UTF-8 (3 байта, hex EF BB BF) в начале файла. В противном случае Excel будет интерпретировать данные в соответствии с кодировкой по умолчанию вашего языка (например, cp1252) вместо utf-8, а ваши символы, отличные от ASCII, будут уничтожены.

Следующие комментарии относятся к Excel 2003, 2007 и 2013 год; не проверен в Excel 2000

Если вы открываете файл, дважды щелкнув его имя в проводнике Windows, все будет работать нормально.

Если вы откроете его из Excel , результаты меняются:

  1. У вас есть только ASCII-символы в файле (и без спецификации): работает.
  2. У вас есть символы, отличные от ASCII (закодированные в UTF-8 ) в файле со спецификацией UTF-8 в начале: он распознает, что ваши данные закодированы в UTF-8, но игнорирует расширение csv и помещает вас в Text Import not-a-Wizard , к сожалению, в результате вы получите проблему с разрывом строки.

Параметры включают в себя:

  1. Обучить пользователей не открывать файлы из Excel : - (
  2. Рассмотрите возможность записи файла XLS напрямую ... для этого доступны пакеты / библиотеки для Python / Perl / PHP / .NET / etc
60
ответ дан Marcel Gosselin 1 September 2018 в 00:44
поделиться
  • 1
    Спасибо, я исправил проблему с ведущими пробелами в вопросе, я набрал пример CSV вручную и не скопировал-вставить из реального файла, настоящий файл не включает эти пробелы, хороший улов. – Nir 10 August 2009 в 08:41
  • 2
    @Nir: Теперь поговорим о вашей реальной проблеме. Таким образом, это означает, что у вас есть спецификация UTF-8, и открыл файл из Excel и получил мастер импорта текста, не признающий, что ваша строка Value3 должна быть «защищена». -- верный? Или, возможно, у вас не было спецификации UTF-8, и вам нужно было сообщить TIW, что ваши данные кодируются в кодировке UTF-8, и она все еще испортила новую строку? – John Machin 10 August 2009 в 12:25
  • 3
    Что делать, если я хочу использовать | как разделитель полей, новая строка в качестве разделителя записей, используют & quot; для защиты содержимого текстовых полей, а текстовые поля могут содержать |, & quot ;, и новую строку. Это возможно? – Giorgio 27 October 2011 в 10:43
  • 4
    FYI: У меня Excel2007 и CSV экспортированы из Redmine системы. После добавления спецификации UTF-8 (EFBBBF) с самого начала Excel отлично открыл файл. Новые строки, встроенные в "описание выпуска" colunm обрабатываются правильно, а структура строк не повреждена, и все национальные символы читаются правильно (они были разбиты при чтении без спецификации UTF8). Excel даже не отображает мастер импорта текста. В настоящее время CSV теперь имеет заголовок EFBBBF, использует 0A в качестве разделителя строк и 0D0A как новую строку внутри строк в текстовых ячейках. – quetzalcoatl 7 January 2015 в 13:01
  • 5
    Если вы пытаетесь заставить Excel для OS X правильно читать CSV, , а также Excel для Windows, вот отличный ресурс: stackoverflow.com/questions/4348802/… – Alexandre R. Janini 25 February 2015 в 01:25

После многократной настройки, вот конфигурация, которая работает с генерацией файлов в Linux, чтение в Windows + Excel

  • Новые строки внутри поля должны быть\n (и, очевидно, указаны в двойных кавычках)
  • Конец записи:\r\n
  • Убедитесь, что вы не запустили поле с равными, иначе оно обрабатывается как формула и усекается

В Perl я использовал Text :: CSV, чтобы сделать это следующим образом:

use Text::CSV;

open my $FO, ">:encoding(utf8)", $filename or die "Cannot create $filename: $!";
my $csv = Text::CSV->new({ binary => 1, eol => "\r\n" });

#for each row...:
$csv -> print ($FO, \@row);
22
ответ дан Anirvan 1 September 2018 в 00:44
поделиться
  • 1
    Да, это сделал. Я могу подтвердить, что это работает с Windows + Excel, OSX + Numbers и Google Docs. – Yorick Sijsling 5 August 2012 в 20:11
  • 2
    Используя\n (также попытался\n) в поле, заключенном с " , и используя\r\n для разделения строк. Все еще не исправил эту проблему для меня в Excel 2010. Я пробовал ANSI и UTF8-с-BOM. Нет успеха – nl-x 15 May 2013 в 11:13
  • 3
    Но это потому, что я использую | как разделитель полей. Если я использую; как разделитель полей, проблема сохраняется при импорте CSV-данных, но проблема исчезает при открытии CSV, дважды щелкнув ее в Проводнике. – nl-x 15 May 2013 в 11:48
  • 4
    Ответ Ian не работает для меня в Excel 2003/2010 в Windows 7. Я попытался использовать hex-редактор для редактирования моего спецификатора UTF-8 и удалил 0D (\r) из битов '0D0A' (\r\n) для новых строк в полях. Но это не сработает. – Dan W 1 June 2013 в 20:17
  • 5
    Этот ответ работал для меня (с нулевыми изменениями!) С использованием Excel 2010 и WIndows 7; также используя perl v5.14.2, который поставляется с cygwin. Мои встроенные новые строки были \n. благодаря – ardnew 1 July 2015 в 16:32

На ПК символ ASCII # 10 - это то, что вы хотите поместить в строку значение новой строки.

Однако, как только вы получите его в Excel, вам нужно убедиться, что перенос слов включен для многострочные ячейки или новая строка будут отображаться как квадратные поля.

3
ответ дан devuxer 1 September 2018 в 00:44
поделиться

Это не сработает, если вы попытаетесь импортировать файл в EXCEL.

Свяжите расширение файла csv с EXCEL.EXE, чтобы вы могли вызвать EXCEL, дважды щелкнув файл csv.

Здесь я помещаю некоторый текст, за которым следует NewLine Char, за которым следует еще какой-то текст И, охватывая всю строку двойными кавычками.

Не используйте CR, поскольку EXCEL поместит часть строки в следующей ячейке.

""text" + NL + "text""

Когда вы вызываете EXCEL, вы увидите это. Возможно, вам придется автоматически задавать высоту, чтобы увидеть все. Где разрыв линии будет зависеть от ширины ячейки.

2

DATE

Вот код в Basic

CHR$(34,"2", 10,"DATE", 34)
3
ответ дан Dror Bereznitsky 1 September 2018 в 00:44
поделиться

Недавно у меня была аналогичная проблема, я решил ее, импортировав HTML-файл, пример базовой строки будет таким:

<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
  <head>
    <style>
      <!--
      br {mso-data-placement:same-cell;}
      -->
    </style>
  </head>
  <body>
    <table>
      <tr>
        <td>first line<br/>second line</td>
        <td style="white-space:normal">first line<br/>second line</td>
      </tr>
    </table>
  </body>
</html>

Я знаю, что это не CSV, и может работать по-разному для различные версии Excel, но я думаю, что стоит попробовать.

Надеюсь, это поможет; -)

14
ответ дан dtldarek 1 September 2018 в 00:44
поделиться
  • 1
    downvote, а не CSV. – GusDeCooL 25 November 2013 в 20:59
  • 2
    @GusDeCooL Формулировка первого предложения OP «Мне нужно сгенерировать файл для Excel, некоторые из значений в этом файле содержат несколько строк. & Quot; предполагает, что, возможно, ему не нужен CSV-файл. Кроме того, формат Q & amp; A относится и к другим читателям, и для некоторых из них это может быть жизнеспособным выбором (даже если OP должен был использовать CSV). Я нахожу ваш downvote необоснованным (все же, спасибо за объяснение, почему). – dtldarek 26 November 2013 в 00:33
  • 3
    Это хорошая идея. – Robinicks 16 September 2014 в 08:17

положив «\r» в конце каждой строки, фактически имел эффект разрывов строк в excel, но в .csv он исчез и оставил уродливый беспорядок, где каждая строка была раздавлена ​​против следующего без пробела и без строки -breaks

1
ответ дан Duncan Wallace 1 September 2018 в 00:44
поделиться

Проверьте это: он полностью работает для меня: поместите следующие строки в файл xxxx.csv

hola_x,="este es mi text1"&CHAR(10)&"I sigo escribiendo",hola_a

hola_y,="este es mi text2"&CHAR(10)&"I sigo escribiendo",hola_b

hola_z,="este es mi text3"&CHAR(10)&"I sigo escribiendo",hola_c

Открыть с помощью excel.

в некоторых случаях откроется напрямую иначе необходимо будет использовать столбец для преобразования данных. расширьте ширину столбца и нажмите кнопку обертки. или форматировать ячейки и активировать текст обмотки.

и спасибо за другие предложения, но они не сработали для меня. Я нахожусь в чистом окне env и не хочу играть с unicode или другим смешным.

Таким образом, вы добавляете формулу csv в excel. Для этого метода работы может быть много применений. (обратите внимание на = перед кавычками)

pd: В ваших предложениях, пожалуйста, поместите некоторые образцы данных не только в код.

1
ответ дан Durgpal Singh 1 September 2018 в 00:44
поделиться

Новая строка внутри значения, похоже, работает, если вы используете точку с запятой как разделитель вместо запятой или вкладкой и используете кавычки.

Это работает для меня как в Excel 2010, так и в Excel 2000. Однако удивительно, он работает только при открытии файла в виде новой электронной таблицы, а не при его импортировании в существующую таблицу с использованием функции импорта данных.

5
ответ дан Esben 1 September 2018 в 00:44
поделиться
  • 1
    да, но тогда я не нашел вариант сделать конечную линию с точкой с запятой в excel – GusDeCooL 25 November 2013 в 20:58
  • 2
    Что делать, если некоторые фактические текстовые данные содержат двоеточие? Это не сработает. – htm11h 24 July 2017 в 15:25

вы можете сделать следующее "\" Value3 Line1 Value3 Line2 \ "". Он работает для меня, создавая файл csv в java

-1
ответ дан Fredy Chica 1 September 2018 в 00:44
поделиться

Я нашел это, и он сработал для меня

$delimiter = ',';
$enc1 = '"';
$enc2 = '""';

Тогда, когда вам нужно иметь материал, заключенный в

$myfile = ('/path/to/myfile.csv');
//erase any previous contents
$fp = fopen($myfile, 'w+');
fwrite($fp, $enc1 .  'Column Heading 1' . $enc1 . $delimiter );
//append to new file
$fp2 = fopen($myfile, 'a');
fwrite($fp2, $enc1 .  'Column Heading 2' . $enc1 . $delimiter );

.....

fwrite($fp2, $enc1 .  'Last Column Heading' . $enc1 . $delimiter. PHP_EOL );

Тогда, когда вам нужно что-то написать - например, HTML, который включает в себя «вы можете это сделать

fwrite($fp2, $enc2 .  $myhtmlstring . $enc2 . $delimiter);

Новые строки заканчиваются на . PHP_EOL

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

echo 'Click <a href="myfile.csv">here</a> to download file';
0
ответ дан Lisa Simpson 1 September 2018 в 00:44
поделиться

Вот интересный подход с использованием JavaScript ...

  String.prototype.csv = String.prototype.split.partial(/,\s*/);  

  var results = ("Mugan, Jin, Fuu").csv();                        

  console.log(results[0]=="Mugan" &&                                   
         results[1]=="Jin" &&                                     
         results[2]=="Fuu",                                       
         "The text values were split properly");                  
-2
ответ дан Matt 1 September 2018 в 00:44
поделиться

Вы можете использовать комбинацию клавиш ALT + Enter.

  1. Выбрать ячейку, которую вы хотите отредактировать
  2. войти в режим редактирования, дважды щелкнув по ней или нажав F2 3. Нажмите Alt + Enter. Это создаст новую строку в ячейке
-1
ответ дан Meghana Chamarthy 1 September 2018 в 00:44
поделиться
  • 1
    Как вы интегрируете это в создание CSV-файлов? – jikuja 10 August 2018 в 08:45

Стоит отметить, что когда файл .CSV имеет поля, заключенные в двойные кавычки, которые содержат разрывы строк, Excel не будет импортировать файл .CSV должным образом, если файл .CSV написан в формате UTF-8. Excel рассматривает разрыв строки, как если бы он был CR / LF и начинал новую строку. Электронная таблица искажена. Это кажется правдой, даже если полуколоны используются как разделители полей (вместо запятых).

Проблема может быть решена с помощью Windows Notepad для редактирования файла .CSV, используя File> Save As. .. сохранить файл и перед сохранением файла, изменив кодировку файла с UTF-8 на ANSI. После того как файл будет сохранен в формате ANSI, я обнаружил, что Microsoft Excel 2013, работающий в Windows 7 Professional, будет импортировать файл должным образом.

8
ответ дан OneSkyWalker 1 September 2018 в 00:44
поделиться

Способ, которым мы это делаем (мы используем VB.Net), заключается в том, чтобы заключить текст с новыми строками в Chr (34), который является символом, представляющим двойные кавычки, и заменяет все символы CR-LF для LF.

0
ответ дан Sebastian 1 September 2018 в 00:44
поделиться

Печать новой строки HTML <br/> в контенте и открытие в excel будет отлично работать на любом excel

-3
ответ дан Shashi 1 September 2018 в 00:44
поделиться

Файлы UTF, содержащие спецификацию, заставят Excel обрабатывать новые строки буквально, даже в этом поле окружено кавычками. (Протестировано Excel 2008 Mac)

Решение состоит в том, чтобы сделать любые новые строки возвратом каретки (CHR 13), а не фидом строки.

1
ответ дан Stephen 1 September 2018 в 00:44
поделиться

Обычно новая строка «\r\n». В моем CSV я заменил «\r» пустым значением. Вот код в Javascript:

cellValue = cellValue.replace(/\r/g, "")

Когда я открываю CSV в MS Excel, он работал хорошо. Если значение имеет несколько строк, оно останется в пределах одной отдельной ячейки на листе Excel.

0
ответ дан Tam Tran 1 September 2018 в 00:44
поделиться
Другие вопросы по тегам:

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