C # Resuable библиотека для обработки текстового файла как таблицы базы данных? - PullRequest
3 голосов
/ 04 декабря 2009

Я хотел бы сохранить значения в текстовом файле в виде значений, разделенных запятыми или табуляцией (это не имеет значения).

Я ищу повторно используемую библиотеку, которая может манипулировать этими данными в этом текстовом файле, как если бы это была таблица SQL.

Мне нужно select * from... и delete from where ID = ...... (ID будет первым столбцом в текстовом файле).

Есть ли какой-нибудь проект code plex, который занимается такими вещами?

Мне не нужны сложные функции, такие как присоединение или отношения. У меня будет только 1 текстовый файл, который станет 1 таблицей базы данных.

Ответы [ 7 ]

3 голосов
/ 04 декабря 2009

Использовать LINQ to CSV .

http://www.codeproject.com/KB/linq/LINQtoCSV.aspx

http://www.thinqlinq.com/Post.aspx/Title/LINQ-to-CSV-using-DynamicObject.aspx

Если это не CSV в этом случае

Пусть ваш файл содержит одну запись на строку. Каждая запись во время выполнения должна быть прочитана в коллекцию типа Record [при условии, что запись - это пользовательский класс, представляющий отдельную запись]. Вы можете выполнять операции LINQ над коллекцией и записывать коллекцию обратно в файл.

2 голосов
/ 04 декабря 2009
2 голосов
/ 04 декабря 2009

Вы смотрели на библиотеку FileHelpers ? Он имеет возможность чтения и анализа текстового файла в объектах CLR. Комбинируя это с мощью чего-то вроде LINQ to Objects, вы получаете необходимую вам функциональность.

2 голосов
/ 04 декабря 2009

Используйте ODBC. Есть текстовый драйвер Microsoft для csv-файлов. Я думаю, что это было бы возможно. Я не проверял, можете ли вы манипулировать через ODBC, но вы можете легко это проверить. Для запросов вы также можете использовать linq.

1 голос
/ 04 декабря 2009
public class Item
{
    public int ID { get; set; }
    public string Type { get; set; }
    public string Instance { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        string[] lines = File.ReadAllLines("database.txt");

        var list = lines
                .Select(l =>
                    {
                        var split = l.Split(',');
                        return new Item
                        {
                            ID = int.Parse(split[0]),
                            Type = split[1],
                            Instance = split[2]
                        };
                    });

        Item secondItem = list.Where(item => item.ID == 2).Single();

        List<Item> newList = list.ToList<Item>();
        newList.RemoveAll(item => item.ID == 2);

        //override database.txt with new data from "newList"
    }
}

Как насчет удаления данных. LINQ для запроса, а не для манипуляции. Тем не менее, List предоставляет на основе предиката RemoveAll, который делает то, что вы хочу:

newList.RemoveAll(item => item.ID == 2);

Также вы можете просмотреть более продвинутое решение "LINQ to Text или CSV файлы"

0 голосов
/ 04 декабря 2009
0 голосов
/ 04 декабря 2009

Я бы также предложил использовать ODBC. Это не должно усложнять развертывание, вся конфигурация может быть установлена ​​в строке подключения, поэтому вам не нужен DSN.

Вместе с файлом schema.ini вы даже можете задать имена столбцов и типы данных, ознакомьтесь с этой статьей KB от MS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...