Как я могу изменить свой код C # для чтения из файла? - PullRequest
0 голосов
/ 07 августа 2011

У меня есть такой код.

td = new Test.Detail();
t = td.Details;          // This is a list of strings
t.Add("aaa");
t.Add("bbb");
t.Add("ccc");

Это исходный файл в VS2010, и в настоящее время он используется для загрузки некоторых статических данных.Теперь объем данных вырос, поэтому мы рассматриваем возможность хранения данных в текстовых файлах.Таким образом, это может быть легко изменено.Мне нужен какой-то способ для чтения этих данных в программу из моих текстовых файлов, которые выглядят следующим образом:

> test1
aaa
bbb
ccc

> test2
ddd
eee
fff

Код должен прочитать в test1 в переменную, прочитать и добавить следующие строки в nDдо пустой строки.В этот момент ему необходимо выполнить какое-то действие.Затем нужно снова начать чтение в test2.

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

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 07 августа 2011

Сериализация.

[DataContract]
public sealed class Test
{
    public DetailCollection Details {get;set;}
}
[CollectionDataContract]
public sealed class DetailCollection : Collection<string> {}

С помощью этих двух классов вы можете сериализовать их множеством способов, отредактировать полученный XML-файл и десериализовать их по своему усмотрению.

классическая XML-сериализация

// serialize
var ser= new XmlSerializer(typeof(Test));
using(var fs= new StreamWriter(@"C:\testdata.xml"))
    ser.Serialize(fs, TestObj);
// deserialize
using(var fs= new FileStream(@"C:\testdata.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
    Test test = (Test)ser.Deserialize(fs);

который отстой и глючит. Существует также сериализация Xaml:

// сериализация var xaml = XamlServices.Save (тест); // десериализация var test2 = (Test) XamlServices.Load (XmlReader.Create (new StringReader (xaml)));

и DataContractSerializer / NetDataContractSerializer (один и тот же шаблон для обоих типов, один ориентирован на .NET, другой - нет)

// serialize
var ser= new NetDataContractSerializer();
using(var fs= new StreamWriter(@"C:\testdata.xml"))
    ser.Serialize(fs, TestObj);
// deserialize
using(var fs= new FileStream(@"C:\testdata.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
using (var xmlReader = new XmlTextReader(fs))
    Test test = (Test)ser.ReadObject(xmlReader);

Я предпочитаю последние два по ряду причин. В вашем случае я бы предложил сериализацию xaml, как если бы вы установили сборку на Page и правильно использовали ваши пространства имен (xmlns) (вы увидите, что они определены при открытии сериализованного файла), вы будете получить intellisense в VS при редактировании файлов. Полезный.

Обратите внимание, что весь код является c # -подобным псевдокодом, и для корректной работы может потребоваться отладка / редактирование синтаксиса.

1 голос
/ 07 августа 2011

Чтение файла очень легко в C # /. NET

System.IO.StreamReader file;
using(file = new StreamReader(@"c:\myfile.txt"))
{
    while((line = file.ReadLine()) != null)
    {
     // do something with the line
    }
}

Существует множество примеров такого кода, если вы ищете его.

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