2012-04-17 8 views
-2

Мне нужно разработать телефонную книгу.поиск и удаление в текстовом файле

Я пишу данные своих контактов в текстовый файл, и я работаю с консолью. Какие параметры у меня есть, чтобы ПОИСК и УДАЛИТЬ контакт в этом текстовом файле?

Это, как я вставляя контакты:

public class Writer 
{ 
    public void writer (string name,string lastname,string number) 
    { 
     StreamWriter Wrt = new StreamWriter("D:\\Sample.txt",true); 
     Wrt.Write(name); 
     Wrt.Write(lastname); 
     Wrt.Write(number); 
     Wrt.Write("#"); 
     Wrt.Write(""); 
     Wrt.Close(); 
    } 
} 
+7

Это прекрасно и денди, но в чем ваш вопрос. Надеюсь, вы не ожидаете, что мы сделаем домашнее задание, не так ли? –

+1

Вот подсказка - используйте согласованный формат или файл с разделителями для данных в текстовом файле. Алгоритмы поиска и удаления будут намного проще реализовать. – Tim

+0

Прочитайте файл в списке, удалите удаленный контакт и запишите его обратно. Еще лучше поставить флаг _deleted_ на каждую запись в файле и просто перезаписать флаг, когда человек будет удален. Затем добавьте флажок и перезапишите первый удаленный человек. –

ответ

0

Каждая строка соответствует контакту, правильно? Каковы ваши критерии для удаления контакта? Если вы ищете имя и фамилию, вы можете это сделать.

string line = null; 
string Criteria = name + " " lastname; 

using (StreamReader reader = new StreamReader("C:\\input")) 
{ 
    using (StreamWriter writer = new StreamWriter("C:\\output")) 
    { 
    while ((line = reader.ReadLine()) != null) 
    { 
     if (line.Contains(Criteria)) 
     continue; 

     writer.WriteLine(line); 
    } 
    } 
} 

Это будет читать ваш файл и записывать все контакты, которые вы хотите сохранить в другом файле.

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

//Method with a class containing the info because informations are on several lines 
Contact[] contacts = MethodToRead("filename.txt"); 
Contact[] filteredContacts = methodFilterContacts(contacts); 
foreach(Contact c in filteredContacts) 
{ 
    //Call your write method mentionned 
    Writer.writer(c.name, c.lastname, c.number); 
} 

//Method if contact on only one line 
string[] contactLines = File.ReadAllLines("filename.txt"); 
string[] filteredContactLines = methodFilterContacts(contactLines); 
//This will write everything as is 
File.WriteAllLines("filename.txt", filteredContactLines); 

Это было, если вы хотите сохранить свой текстовый файл. Как было предложено ранее, вы можете использовать xml для записи и чтения более простого в обслуживании файла. Если вы знаете основы xml, или для небольшой задачи (и у вас есть время для этого), это может быть лучший способ пойти.

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