将文本文件读入数组?

时间:2014-09-24 09:46:10

标签: c# visual-studio-2013

我试图通过将联系人存储在文本文件中来制作联系簿。例如,假设我有两个名为first name和surname的字符串,在文本文件中我有一个名字,在下一行有一个姓氏。这是我目前的代码,但我不知道在do循环中我需要做什么,如何读取一行,将其插入字符串xxx,读取下一行并将其存储在字符串yyy中?

    public Contacts[] getAllContacts()
    {

        List<Contacts> theContactList = new List<Contacts>();

        string file_name = "Contacts.txt";
        string textLine = "";

        if (System.IO.File.Exists(file_name) == true)
        {
            System.IO.StreamReader objReader;
            objReader = new System.IO.StreamReader(file_name);


            do
            {
                objReader.ReadLine() + "\r\n";

            } while (objReader.Peek() != 1);

        }
        if (theContactList.Count > 0)
        {
            return theContactList.ToArray();

        }
        else
        {
            return null;
        }


    }

我还需要能够在文本文件中存储多个联系人和更多字段,例如地址,电话号码等。

4 个答案:

答案 0 :(得分:2)

假设在那里总共有2条线并且它们具有相同的顺序,则以下代码可以在那里工作:

public Contacts[] getAllContacts()
{

    List<Contacts> theContactList = new List<Contacts>();

    string file_name = "Contacts.txt";
    string textLine = "";
    bool firstNameLine = true;

    if (System.IO.File.Exists(file_name) == true)
    {
        System.IO.StreamReader objReader;
        objReader = new System.IO.StreamReader(file_name);
        Contact newContact;

        do
        {
            textLine = objReader.ReadLine();
            if (firstNameLine)
            {
                newContact = new Contact();
                newContact.firstName = textLine;
            }
            else
            {
                newContact.sureName = textLine;
                theContactList.Add(newContact);
            }

            firstNameLine = !firstNameLine;

        } while (objReader.Peek() != 1);

    }
    if (theContactList.Count > 0)
    {
        return theContactList.ToArray();

    }
    else
    {
        return null;
    }


}

因此代码在这种情况下使用一个布尔变量,它定义了哪个行读取用于填充哪个字符串。如果它超过2行(超过2个字符串)则需要一个整数变量(增加+1,然后在读取所需的最后一行时重置)而不是if if switch语句。

答案 1 :(得分:2)

可能最好使用XML或CSV文件,甚至只是一个文本文件,但每个&#34;联系人&#34;在同一条线上解析它们。

以下代码将执行您想要的操作。

 public Contacts[] GetAllContacts()
    {
        List<Contacts> contacts = new List<Contacts>();
        const string filePath = "Contacts.txt";

        if (File.Exists(filePath))
        {
            using (StreamReader sr = new StreamReader(filePath))
            {
                do
                {
                    Contacts contact = new Contacts();
                    contact.FirstName = sr.ReadLine();
                    contact.Surname = sr.ReadLine();
                    contacts.Add(contact);

                } while (sr.Peek() != -1);
            }
        }

        return contacts.ToArray();
    }

答案 2 :(得分:1)

 while (objReader.Peek() != -1)
 {
     theContactList.Add(new Contact() { Firstname = objReader.ReadLine(), SurName = objReader.ReadLine()});
 }

使用初始化列表。 (显然对Contact类成员做出假设)

答案 3 :(得分:0)

使用它:

string [] file_array = File.ReadAllLines("path");

PS: using System.IO; 此函数读取整个文件并将其行存储在数组中,您可以编辑数组行,然后使用

File.WriteAllLines("path",file_array);

将它们放回文件中。