2014-11-02 6 views
-2

у меня есть 1000 текстовый файл и я хочу прочитать сингл сингл и каждый файл имеет 4700000 запись, например, одной строки в файле:
Как я могу прочитать большой файл txt?

43266200 6819   43295200 1393/05/23 14:28:45 113  1 

и я хочу сохранить в SQL сервере, например:

field1:43266200 
field2:6819 

как я могу это сделать?

+0

Насколько велика каждая строка (запись)? Является ли фиксированная длина записи? Я бы рекомендовал «StreamReader» избежать возможных проблем с памятью. – Tim

+0

Возможно, вам понадобится [C# чтение строки строки по строке] (http://stackoverflow.com/questions/1271225/c-sharp-reading-a-file-line-by-line), если ваш файл достаточно большой и не хотят загружать его в память сразу. – mihai

+1

Итак, вам нужна книга, рассказывающая вам, как читать текстовый файл? Пробовал документацию? – TomTom

ответ

1

Это может помочь вам

var message ="43266200 6819   43295200 1393/05/23 14:28:45 113  1"; 
//Split your data into pieces 
var messages=message.Split(' ').Where(o => !string.IsNullOrEmpty(o)); 
var i=0; 
foreach(var item in messages) 
{ 
    // do whatever you wanna to do with pieces 
    Console.Write("field {0}:{1}",++i,item); 
} 
+4

Это приведет к пучке пустых полей, поскольку вы раскалываетесь на одном пространстве. На самом деле не используйте 'StringSplitOptions.RemoveEmpties'. – Tim

+0

Спасибо за информацию :) –

1

Если вы читаете текст из файла, и вы обоснованно можно предположить, что пробел будет вашим единственным ограничителем, вы должны использовать метод String.Split() чтобы разметить каждый линия:

// instantiate FileInfo of your file as yourFile 

foreach (string line in yourFile.ReadLines()) 
{ 
    string[] lineTokens = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); 
} 

String.Split() позволяет отделить любую строку в строку [] подстрок на основе char разделителей, которые вы предоставляете в первом аргументе. Второй аргумент в приведенном выше коде является одним из значений в перечислении StringSplitOptions, который имеет значения либо None (предоставить все строки), либо RemoveEmptyEntries (не возвращать подстроки, состоящие исключительно из символов разделителя).

После этого вы можете выполнять итерацию по линииTokens и собирать объект из каждого токена, или вы можете собрать SQL-запрос, где любой данный индекс соответствует столбцу в строке, которую вы собираетесь добавить.

2
var seperators = " ".ToCharArray(); 
foreach(var line in File.ReadLines(path)) 
{ 
    var fields = line.Split(seperators, StringSplitOptions.RemoveEmptyEntries); 
    //now you have fields[0] and fields[1], save them in your database 
} 
+0

ReadLines не надежен для таких больших файлов (OutOfMemoryExceptions и т. Д.). Линейный потоковый анализатор должен работать лучше. – AFract

+1

'ReadLines' возвращает' IEnumerable ' и предназначен для использования с большими файлами, потому что он просто извлекает текущую строку в память не весь файл, может быть, вы говорите о 'ReadAllLines', который возвращает строку [] и читает целую файл сразу. – dotctor

+0

Вы правы, извините. Я действительно думал о ReadAllLines. – AFract

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