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="
}
我 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="
}