2014-01-04 3 views
1

У меня есть этот текстовый файлRead Column из текстового файла C#

688.63  C   1   C  0   0   0 
698.70  C   1   C  0   0   0 
708.89  C   1   C  0   0   0 
716.78  C   1   C  0   0   0 
718.97  C   1   C  0   0   0 
728.27  C   1   C  0   0   0 
728.89  C   1   C  0   0   0 
738.82  C   1   C  0   0   0 
759.00  C   1   C  0   0   0 

является как проблем качества читать каждый столбец в массив ??

и как насчет того, если я хочу получить конкретное значение столбца? как значение 2 столбца один ....

+2

Что ж ты ant массив, чтобы выглядеть? Опубликовать объявление C#. Столбцы выглядят так, как будто они должны иметь разные типы. –

+0

Возможный дубликат http://stackoverflow.com/questions/15183355/reading-integers-from-a-text-file-in-c-sharp –

ответ

4

Вы можете использовать метод File.ReadAllLines.

Открывает текстовый файл, читает все строки файла, а затем закрывает файл .

Пример из MSDN;

string path = @"c:\temp\MyTest.txt"; 
string[] lines = File.ReadAllLines(path); 

Это создаст массив, который хранится в виде строки по строкам.

, а как насчет того, если я хочу получить конкретное значение столбца? как значение 2 колонки один

Если все значения имеет то же пространство между ними, вы можете использовать String.Split метод, как;

string s = "688.63  C   1   C  0   0   0"; 
var array = s.Split(new string[]{"  "}, StringSplitOptions.RemoveEmptyEntries); 
Console.WriteLine(array[1]); // Prints "C" 

Здесь в demonstration.

В вашем случае вы можете использовать;

var array = lines[1].Split(new string[]{"  "}, StringSplitOptions.RemoveEmptyEntries); 
Console.WriteLine(array[0]); // Prints "698.70" 

line[1] получить вам вторую строчку на тексте и array[0] получает вас первое значение этой линии, которая является 698.70.

я хочу, чтобы напечатать как этот 688.63 698.70 708.89 все значения первого столбца появляться не только Елки значение.

Вы можете использовать foreach like;

string[] lines = File.ReadAllLines(path); 
foreach(var line in lines) 
{ 
    var firstValue = line.Split(new string[]{"  "}, StringSplitOptions.RemoveEmptyEntries)[0]; 
    Console.WriteLine(firstValue); 
} 
+0

Не совсем полный ответ. –

+0

@HenkHolterman Yeap. Обновление идет. –

+0

то как разделить каждый столбец один ??? – user1477332

3

Вы можете использовать File.ReadAllLines:

File.ReadAllLines возвращает массив. Этот массив содержит строку для каждой строки в указанном файле. Мы используем этот метод. Затем мы рассмотрим в своей реализации .NET Framework, чтобы узнать, как это работает. Это , найденное в пространстве имен System.IO. Открывает текстовый файл, считывает все строки файла и затем закрывает файл .

Метод File.ReadAllLines не является низкоуровневой реализацией. Вместо этого он использует List и тип StreamReader, а затем ToArray, чтобы вернуть массив. Это неэффективно, если вы хотите поместить файл в список.

Если вам нужно оптимизировать вызов File.ReadAllLines, вы можете оценить емкость списка в его конструкторе, что уменьшит размеры. Вы также можете избежать ToArray, если хотите сохранить Список.

List Examples

Using StreamReader

ToArray Extension Method

Capacity Property

Использование this:

string[] records = File.ReadAllLines(path); 
foreach(string record in records) 
{ 
    DataRow r = myDataTable.NewRow(); 
    string[] fields = record.Split('\t'); 
    /* Parse each field into the corresponding r column 
    * .... 
    */ 
    myDataTable.rows.Add(r); 
} 
+0

'File.ReadLines()' будет оптимизацией для (очень) больших файлов. –

+0

@HenkHolterman Ok Waite please –

+0

У меня ошибка в этом myDataTable ?? – user1477332

0

Я думаю, что вам нужно two dimensional array

string[] lines = File.ReadAllLines("path"); 

string[][] myRecords = new string[lines.Count()+1][]; 
int k = 1; 
foreach (var line in lines) 
{ 
    var values = line.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries); 
    for (int i = 1; i < values.Length; i++) 
    { 
     if (myRecords[k] == null) myRecords[k] = new string[values.Length+1]; 
     myRecords[k][i] = values[i]; 
    } 
    k++; 
    } 

Тогда вы можете получить доступ к значению, например, строки 1 колонок 3:

myRecord[1][3] 
+0

ошибка в myRecords [k] [i] = значения [i]; Необработанное исключение типа «System.NullReferenceException» произошло при чтении строк или столбцов в тексте file.exe Дополнительная информация: Ссылка на объект не установлена ​​в экземпляр объекта. – user1477332

+0

попробуйте еще раз ...... –

0

Вы можете создать класс записи, а затем использовать простой LINQ запрос:

var records = File.ReadLines("file.txt") .Select(line => { string[] parts = line.Split('\t'); return new Record { column1 = int.Parse(parts[0]), column2= parts[1], column3= int.Parse(parts[2]), column4= parts[3], column5= int.Parse(parts[4]), column6= int.Parse(parts[5]), column7= int.Parse(parts[6]) }; }).ToArray();

Это даст вам кучу Рекорды, по одному в строке в исходном file.You может выбрать столбцы в записи, как этого

var allColumn1s = records.Select(rec => rec.column1);

Смежные вопросы