簡體   English   中英

Csharp子字符串文本並將其添加到列表

[英]Csharp substring text and add it to list

我有file.txt之類的: 編輯:我沒有寫過,但這很重要,我想-在file.txt中可以有其他行!

folder=c:\user;c:\test;c:\something;

我需要添加一個路徑,例如一個列表項( List<string> Folders )。 所以我的清單應該像這樣:

Folders[0] = c:\user
Folders[1] = c:\test

等等(不帶文本“ folder =“,它以file.txt開頭的行,沒有“;”表示路徑的結尾)。

文件可以包含更多路徑。 我做了這樣的事情:

       using (FileStream fss = new FileStream(path, FileMode.Open))
        {
            using (StreamReader sr = new StreamReader(fss))
            {

                while (sr.EndOfStream == false)
                {
                    string line = sr.ReadLine();
                    if(line.StartsWith("folders"))
                    { 
                       int index = line.IndexOf("=");
                       int index1 = line.IndexOf(";");
                       string folder = line.Substring(index + 1, index1 - (index + 1));
                       Folders.Add(folder);

現在在列表文件夾中,我有第一個路徑,但是現在呢? 我不能繼續:(

using(var sr = new StreamReader(path))
{
    var folders = sr.ReadToEnd()
    .Split(new char[]{';','\n','\r'}, StringSplitOptions.RemoveEmptyEntries)
    .Select(o => o.Replace("folder=",""))
    .ToArray();
    Folders.AddRange(folders);
}

您可以使用File.ReadAllText嘗試以下代碼

            string Filepath = "c:\abc.txt";
            string filecontent = File.ReadAllText(Filepath);
            string startingString = "=";
            var startIndex = filecontent.IndexOf(startingString);
            filecontent = filecontent.Substring(startIndex + 1, filecontent.Length - startIndex - 2);
            List<String> folders = filecontent.Split(';').ToList();

這是一個簡單的例子:

    List<String> Folders = new List<string>();

    private void button1_Click(object sender, EventArgs e)
    {
        string path = @"C:\Users\mikes\Documents\SomeFile.txt";

        string folderTag = "folder=";
        using (FileStream fss = new FileStream(path, FileMode.Open))
        {
            using (StreamReader sr = new StreamReader(fss))
            {
                while (!sr.EndOfStream)
                {
                    string line = sr.ReadLine();
                    if (line.StartsWith(folderTag))
                    {
                        line = line.Substring(folderTag.Length); // remove the folderTag from the beginning
                        Folders.AddRange(line.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
                    }
                }
            }
        }

        foreach(string folder in Folders)
        {
            Console.WriteLine(folder);
        }
    }

如果您要逐行閱讀,並根據每行的開頭進行其他操作,我會使用這種方法。 在這種情況下,您可以添加其他else if(...)塊:

                    if (line.StartsWith(folderTag))
                    {
                        line = line.Substring(folderTag.Length); // remove the folderTag from the beginning
                        Folders.AddRange(line.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
                    }
                    else if(line.StartsWith("parameters="))
                    {
                        // do something different with a line starting with "parameters="
                    }
                    else if (line.StartsWith("unicorns="))
                    {
                        // do something else different with a line starting with "unicorns="
                    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM