В то время как , что вызывает 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>
У вас должны быть пробелы в начале полей ТОЛЬКО, где пробельные символы являются частью данных. Excel не будет удалять ведущие пробелы. Вы получите нежелательные пробелы в заголовках и полях данных. Хуже того, "
, который должен «защищать» этот разрыв строки в третьем столбце, будет проигнорирован, потому что он не находится в начале поля.
Если у вас есть символы, отличные от ASCII (закодированные в UTF-8) в файле, вы должны иметь спецификацию UTF-8 (3 байта, hex EF BB BF
) в начале файла. В противном случае Excel будет интерпретировать данные в соответствии с кодировкой по умолчанию вашего языка (например, cp1252) вместо utf-8, а ваши символы, отличные от ASCII, будут уничтожены.
Следующие комментарии относятся к Excel 2003, 2007 и 2013 год; не проверен в Excel 2000
Если вы открываете файл, дважды щелкнув его имя в проводнике Windows, все будет работать нормально.
Если вы откроете его из Excel , результаты меняются:
Параметры включают в себя:
После многократной настройки, вот конфигурация, которая работает с генерацией файлов в Linux, чтение в Windows + Excel
В 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);
\n
. благодаря
– ardnew
1 July 2015 в 16:32
На ПК символ ASCII # 10 - это то, что вы хотите поместить в строку значение новой строки.
Однако, как только вы получите его в Excel, вам нужно убедиться, что перенос слов включен для многострочные ячейки или новая строка будут отображаться как квадратные поля.
Это не сработает, если вы попытаетесь импортировать файл в EXCEL.
Свяжите расширение файла csv с EXCEL.EXE, чтобы вы могли вызвать EXCEL, дважды щелкнув файл csv.
Здесь я помещаю некоторый текст, за которым следует NewLine Char, за которым следует еще какой-то текст И, охватывая всю строку двойными кавычками.
Не используйте CR, поскольку EXCEL поместит часть строки в следующей ячейке.
""text" + NL + "text""
Когда вы вызываете EXCEL, вы увидите это. Возможно, вам придется автоматически задавать высоту, чтобы увидеть все. Где разрыв линии будет зависеть от ширины ячейки.
2
DATE
Вот код в Basic
CHR$(34,"2", 10,"DATE", 34)
Недавно у меня была аналогичная проблема, я решил ее, импортировав 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, но я думаю, что стоит попробовать.
Надеюсь, это поможет; -)
положив «\r» в конце каждой строки, фактически имел эффект разрывов строк в excel, но в .csv он исчез и оставил уродливый беспорядок, где каждая строка была раздавлена против следующего без пробела и без строки -breaks
Проверьте это: он полностью работает для меня: поместите следующие строки в файл 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: В ваших предложениях, пожалуйста, поместите некоторые образцы данных не только в код.
Новая строка внутри значения, похоже, работает, если вы используете точку с запятой как разделитель вместо запятой или вкладкой и используете кавычки.
Это работает для меня как в Excel 2010, так и в Excel 2000. Однако удивительно, он работает только при открытии файла в виде новой электронной таблицы, а не при его импортировании в существующую таблицу с использованием функции импорта данных.
вы можете сделать следующее "\" Value3 Line1 Value3 Line2 \ "". Он работает для меня, создавая файл csv в java
Я нашел это, и он сработал для меня
$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';
Вот интересный подход с использованием 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");
Вы можете использовать комбинацию клавиш ALT + Enter.
Стоит отметить, что когда файл .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, будет импортировать файл должным образом.
Способ, которым мы это делаем (мы используем VB.Net), заключается в том, чтобы заключить текст с новыми строками в Chr (34), который является символом, представляющим двойные кавычки, и заменяет все символы CR-LF для LF.
Печать новой строки HTML <br/>
в контенте и открытие в excel будет отлично работать на любом excel
Файлы UTF, содержащие спецификацию, заставят Excel обрабатывать новые строки буквально, даже в этом поле окружено кавычками. (Протестировано Excel 2008 Mac)
Решение состоит в том, чтобы сделать любые новые строки возвратом каретки (CHR 13), а не фидом строки.
Обычно новая строка «\r\n». В моем CSV я заменил «\r» пустым значением. Вот код в Javascript:
cellValue = cellValue.replace(/\r/g, "")
Когда я открываю CSV в MS Excel, он работал хорошо. Если значение имеет несколько строк, оно останется в пределах одной отдельной ячейки на листе Excel.
EFBBBF
, использует0A
в качестве разделителя строк и0D0A
как новую строку внутри строк в текстовых ячейках. – quetzalcoatl 7 January 2015 в 13:01