есть ли способ прочитать файл csv в матрицу, поэтому каждый квадрат в файле будет ячейкой в матрице?Чтение csv-файла C#
ответ
Есть много открытых CSV-считывателей с открытым кодом, и это также легко кодировать самостоятельно.
Для начала взять смотреть на CodePlex.com: http://kbcsv.codeplex.com/
Или Codeproject учебники: http://www.codeproject.com/KB/database/CsvReader.aspx
Ради завершенности, вот мой собственный класс утилита для чтения строки из файла CSV:
/// <summary>
/// Defines CSV reader states
/// </summary>
enum State
{
Initial,
Quote,
Data,
NestedQuote
}
/// <summary>
/// Initializes a new instance of the <see cref="CsvReader"/> class.
/// </summary>
/// <param name="inputStream">The input stream.</param>
public CsvReader(Stream inputStream)
{
if (inputStream == null)
throw new ArgumentNullException("inputStream");
reader = new StreamReader(inputStream);
}
/// <summary>
/// Reads a single line of CSV data.
/// </summary>
/// <returns>Array of CSV fields</returns>
public string[] Read()
{
var line = reader.ReadLine();
var retval = new List<string>();
if (line == null)
return null;
var state = State.Initial;
var text = new StringBuilder();
foreach (var ch in line)
switch (state)
{
case State.Initial:
if (ch == '"')
state = State.Quote;
else if (ch == ',')
retval.Add(string.Empty);
else
{
text.Append(ch);
state = State.Data;
}
break;
case State.Data:
if (ch == ',')
{
retval.Add(text.ToString());
text.Length = 0;
state = State.Initial;
}
else
text.Append(ch);
break;
case State.Quote:
if (ch == '"')
state = State.NestedQuote;
else
text.Append(ch);
break;
case State.NestedQuote:
if (ch == '"')
{
text.Append('"');
state = State.Quote;
break;
}
state = State.Data;
goto case State.Data;
}
retval.Add(text.ToString());
return retval.ToArray();
}
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose()
{
reader.Dispose();
}
Для того, чтобы матрица (непроверенные):
var data = new List<string[]>();
string[] line;
using(reader = new CsvReader(stream))
while((line = reader.Read()) != null)
data.Add(line);
result = data.Select(row => row.Select(cell => int.Parse(cell)).ToArray()).ToArray();
Выполняет ли эти строки, содержащие каретки в кавычках? – cjk
вот что я хочу сделать: int [] [] mat = READ FROM CSV FILE ...; мой файл csv содержит int ... – aharon
нет, к сожалению, возврат каретки вызывает начало новой строки: var line = reader.ReadLine(); - Я пытался с Excel (2010), и он также не допускал разрывов строк в кавычках, но я точно не знаю спецификации – sukru
Существует много способов. Начиная с байта с помощью байтового считывателя. Это зависит от формата файла CSV (с/без заголовка, строки окончаний, "или«) Я написал мой собственный класс
Хороший читатель, чтобы начать с:..
Там текстовый читатель в пространстве имен VisualBasic, которые могут быть использованы в C# и обрабатывает даже ужасные файлы CSV очень хорошо:.
Просто добавьте ссылку на Microsoft.VisualBasic
в проекте
CSV разбор с регулярными выражениями: http://www.hotblue.com/article0000.aspx?a=0006
Чтобы расширить концепцию с пользовательскими разделителями см этого поста: How do I write a regex to match a string that doesn't contain a word?
- 1. Чтение буфера C/C++
- 2. Чтение неблокирующей клавиатуры - C/C++
- 3. Чтение файла C, чтение дополнительной строки, почему?
- 4. чтение из файла. C
- 5. Чтение строк в C
- 6. Чтение GPS на C++
- 7. C++: Чтение из stringstream
- 8. Чтение ввода в C++
- 9. Чтение потока в C++
- 10. C# Чтение тела ответа
- 11. Чтение функции C
- 12. C# Чтение из NetworkStream
- 13. Чтение cookie в C#
- 14. Чтение удаленного файла [C#]
- 15. Чтение файла в C++
- 16. C: чтение двоичных файлов
- 17. Чтение из файла C++
- 18. C++ чтение файла построчно
- 19. C# Excel Чтение Проблема
- 20. C чтение файлов BMP
- 21. Чтение аудиофайла в C++
- 22. чтение в файлах C++
- 23. C# LINQ - чтение XML
- 24. Чтение .docx в C++
- 25. Чтение gmail с C#
- 26. C# Чтение зашифрованных паролей
- 27. Чтение объекта класса C++
- 28. Чтение XML в C#
- 29. C# UTF8 Чтение/вывод
- 30. c: чтение из файлов
, что вы имеете в виду матрицы? сетка в пользовательском интерфейсе? если да, то какая структура пользовательского интерфейса? Если нет, какой тип структуры данных? –
@James - Я думаю, что он означает массив в матричном формате. 'string [,]' –
вправо! просто, что я хочу int-матрицу, но отливка не является проблемой здесь ... – aharon