Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
null
. null
. null
, как если бы это был массив. null
, как если бы это был массив. null
как будто это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null
.
Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html
string[] splitString = origString.Split(',');
(После комментария, не добавленного исходной отвечающей стороной) , имейте в виду, что этот ответ обращается к КОНКРЕТНОМУ СЛУЧАЮ, где там, как гарантируют, не будут НИКАКИМИ запятыми в данных.
string[] splitStrings = myCsv.Split(",".ToCharArray());
separationChar[] = {';'}; // or '\t' ',' etc.
var strArray = strCSV.Split(separationChar);
string test = "one,two,three";
string[] okNow = test.Split(',');
http://github.com/claco/csvdatareader/, обновленный с помощью TextFieldParser, предложенного cfeduke.
Всего несколько опор далеко от представления separators/trimspaces/type ig Вы просто должны кодировать для кражи.
Нет простого способа сделать это хорошо, если Вы хотите объяснить заключенные в кавычки элементы со встроенными запятыми, особенно если они смешаны с незаключенными в кавычки полями.
Вы также, вероятно, захотите преобразовать строки в словарь, включенный именем столбца.
Мой код, чтобы сделать это - несколько сотен строк долго.
Я думаю, что существуют некоторые примеры в сети, проектах с открытым исходным кодом, и т.д.
Я уже разделял на вкладках, таким образом, это добилось цели для меня:
public static string CsvToTabDelimited(string line) {
var ret = new StringBuilder(line.Length);
bool inQuotes = false;
for (int idx = 0; idx < line.Length; idx++) {
if (line[idx] == '"') {
inQuotes = !inQuotes;
} else {
if (line[idx] == ',') {
ret.Append(inQuotes ? ',' : '\t');
} else {
ret.Append(line[idx]);
}
}
}
return ret.ToString();
}
Файл CSV с Заключенными в кавычки полями, не файл CSV. Намного больше вещей (Excel) вывод без кавычек, а не с кавычками, когда Вы выбираете "Csv" в сохранении как.
Если Вы хотите тот, можно использовать, освободить или согласиться, здесь является моим, который также делает IDataReader/Record. Это также использует DataTable для определения/преобразовывания/осуществления столбцов и DbNull.
http://github.com/claco/csvdatareader/
Это не делает кавычек.. все же. Я просто бросил его вместе несколько дней назад для царапания зуда.
Точка с запятой, о которой забывают: Хорошая ссылка.Спасибо. cfeduke: Спасибо за подсказку к Microsoft. VisualBasic. FileIO.TextFieldParser. Вход в CsvDataReader сегодня вечером.
Некоторые файлы CSV имеют двойные кавычки вокруг значений наряду с запятой. Поэтому иногда можно разделить на этом строковом литерале:
string s = "1,2,3,4,5";
string myStrings[] = s.Split({','}};
Обратите внимание, что Разделение () берет массив символов для разделения на.
Можно смотреть на использование Microsoft. Блок VisualBasic с
Microsoft.VisualBasic.FileIO.TextFieldParser
Это обрабатывает CSV (или любой разделитель) с кавычками. Я нашел это довольно удобным недавно.
Попробуйте это;
static IEnumerable<string> CsvParse(string input)
{
// null strings return a one-element enumeration containing null.
if (input == null)
{
yield return null;
yield break;
}
// we will 'eat' bits of the string until it's gone.
String remaining = input;
while (remaining.Length > 0)
{
if (remaining.StartsWith("\"")) // deal with quotes
{
remaining = remaining.Substring(1); // pass over the initial quote.
// find the end quote.
int endQuotePosition = remaining.IndexOf("\"");
switch (endQuotePosition)
{
case -1:
// unclosed quote.
throw new ArgumentOutOfRangeException("Unclosed quote");
case 0:
// the empty quote
yield return "";
remaining = remaining.Substring(2);
break;
default:
string quote = remaining.Substring(0, endQuotePosition).Trim();
remaining = remaining.Substring(endQuotePosition + 1);
yield return quote;
break;
}
}
else // deal with commas
{
int nextComma = remaining.IndexOf(",");
switch (nextComma)
{
case -1:
// no more commas -- read to end
yield return remaining.Trim();
yield break;
case 0:
// the empty cell
yield return "";
remaining = remaining.Substring(1);
break;
default:
// get everything until next comma
string cell = remaining.Substring(0, nextComma).Trim();
remaining = remaining.Substring(nextComma + 1);
yield return cell;
break;
}
}
}
}
Попытка:
Regex rex = new Regex(",(?=([^\"]*\"[^\"]*\")*(?![^\"]*\"))");
string[] values = rex.Split( csvLine );
Источник: http://weblogs.asp.net/prieck/archive/2004/01/16/59457.aspx
Если Вы хотите устойчивую обработку CSV, проверяете FileHelpers
Строка. Разделение просто не собирается сокращать его, но Regex. Разделение может - Попытка этот:
using System.Text.RegularExpressions;
string[] line;
line = Regex.Split( input, ",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
Где 'введенный' csv строка. Это обработает заключенные в кавычки разделители и должно дать Вам назад массив строк, представляющий каждое поле в строке.
Получите строку [] всех строк:
string[] lines = System.IO.File.ReadAllLines("yourfile.csv");
Затем цикл через и разделение те строки (это подверженное ошибкам, потому что это не проверяет на запятые в разграниченных кавычкой полях):
foreach (string line in lines)
{
string[] items = line.Split({','}};
}