2012-05-17 2 views
1

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

fileNames = openFileDialog1->FileNames; 

StreamReader^ objReader = gcnew StreamReader(fileNames[0]); 
String^ strReader = objReader->ReadToEnd();  //read it to a string 
objReader->Close(); 

//cut the file up 
String^ delimStr = L"\r,\t,\n,' ','.',','"; //pull out the return,tabs,newline 
array<Char>^ delimiter = delimStr->ToCharArray();//transform into an array 
array<String^ >^strSplit = strReader->Split(delimiter);//split up the file 
System::Collections::IEnumerator^ myenum = strSplit->GetEnumerator();//get enumerators 

Dictionary<String^, int>^ saveWords = gcnew Dictionary<String^, int>(StringComparer::InvariantCultureIgnoreCase); 
int position=-1; 

//output the file 
while (myenum->MoveNext())//enumerate through it 
{ 
     position++; 
     try{ 
      saveWords->Add((Convert::ToString(myenum->Current)),0); 
     } 
     catch (Exception ^){ 
      //some code 
     } 

} 

Итак, как я должен использовать XMLSerializer?

P.S. Извините, если код беспорядок и не оптимизирован. Я новичок во всем этом (текстовый синтаксический анализ, словарь, XML), и до сих пор я просто пытаюсь заставить его работать.

ответ

1

Да, вы должны сериализовать словарь в файл XML, есть хороший implemenatation здесь:

http://weblogs.asp.net/pwelter34/archive/2006/05/03/444961.aspx

Обновление для FW 4+ (комментарий от Hearty):

Для того, чтобы работа для последней структуры необходимо иметь корневой элемент.

In the WriteXML add a line: 
+49 writer.WriteStartElement("dictionary"); 
+70 writer.WriteEndElement(); 

In the ReadXML add lines 
+27 reader.ReadStartElement("dictionary"); 
+45 reader.ReadEndElement() 

;

+0

Означает ли это интеграцию класса и вызов SerializableDictionary из основного кода? – Hearty

+0

Не уверен, что я вас не устраивает, но я думаю, что это да. Вы должны использовать этот новый SerializableDictionary, а затем вызвать WriteXml для получения XML-репрезентации словаря –

+0

Не существует ли XMLSerializer, который можно использовать с .Net 3.5? Или единственный способ - использовать этот пользовательский класс из предоставленной вами ссылки? Я прошу об этом, потому что у меня появились ошибки. Я не знаю, из-за моей бедной/неправильной реализации, или она действительно не поддерживается. – Hearty

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