用C#修剪部分文本文件的代码

时间:2011-06-08 18:39:40

标签: c# .net windows

我遇到的情况是,我会收到一个文本文件,其文本格式如下:

C:\Users\Admin\Documents\report2011.docx: My Report 2011
C:\Users\Admin\Documents\newposter.docx: Dinner Party Poster 08

如何修剪文本文件,以便修剪“:”及其后面的所有字符。

E.g。所以输出就像:

C:\Users\Admin\Documents\report2011.docx
C:\Users\Admin\Documents\newposter.docx




Current Code:

        private void button1_Click(object sender, EventArgs e)
        {

            using (StreamWriter sw = File.AppendText(@"c:\output.txt"))
            {
                StreamReader sr = new StreamReader(@"c:\filename.txt");
                Regex reg = new Regex(@"\w\:(.(?!\:))+");
                List<string> parsedStrings = new List<string>();

                while (sr.EndOfStream)
                {
                    sw.WriteLine(reg.Match(sr.ReadLine()).Value);
                }
            }

        }

不工作:(

7 个答案:

答案 0 :(得分:1)

int index = myString.LastIndexOf(":");
if (index > 0)
   myString= myString.Substring(0, index);

编辑 - 根据修改后的问题添加了答案。它可以略微浓缩,但为了清楚显示正在发生的事情而进行了扩展。

 using (StreamWriter sw = File.AppendText(@"c:\output.txt"))
 {
      using(StreamReader sr = new StreamReader(@"input.txt"))
      {                    

          string myString = "";
          while (!sr.EndOfStream)
          {

                myString = sr.ReadLine();
                int index = myString.LastIndexOf(":");
                if (index > 0)
                    myString = myString.Substring(0, index);

                sw.WriteLine(myString);
           }
       }
  }

答案 1 :(得分:1)

被修改

StreamReader sr = new StreamReader("yourfile.txt");
Regex reg = new Regex(@"\w\:(.(?!\:))+");
List<string> parsedStrings = new List<string>();
while (!sr.EndOfStream) 
{
    parsedStrings.Add(reg.Match(sr.ReadLine()).Value);
}

答案 2 :(得分:0)

确定。在阅读每一行时,请执行

Console.WriteLine(line.Substring(0,line.IndexOf(": "));

答案 3 :(得分:0)

我会使用此处给出的答案Code to trim part of a text file in C#并找到第二个匹配项,然后在子字符串中使用它。

var s = @"C:\Users\Admin\Documents\report2011.docx: My Report 2011";
var i = GetNthIndex(s,':',2);
var result = s.Substring(i+1);


public int GetNthIndex(string s, char t, int n)
{
    int count = 0;
    for (int i = 0; i < s.Length; i++)
    {
        if (s[i] == t)
        {
            count++;
            if (count == n)
            {
                return i;
            }
        }
    }
    return -1;
}

答案 4 :(得分:0)

假设这是在文件应该存在的地方完成的,你可以通过在获得冒号索引后检查文件的存在来考虑(我假设的)描述中的任何冒号。

        List<string> files = new List<string>();
        files.Add(@"C:\Users\Admin\Documents\report2011.docx: My Report 2011");
        files.Add(@"C:\Users\Admin\Documents\newposter.docx: Dinner Party Poster 08");
        files.Add(@"C:\Users\Admin\Documents\newposter.docx: Dinner Party: 08");

        int lastColon;
        string filename;
        foreach (string s in files)
        {
            bool isFilePath = false;
            filename = s;
            while (!isFilePath)
            {
                lastColon = filename.LastIndexOf(":");
                if (lastColon > 0)
                {
                    filename = filename.Substring(0, lastColon);
                    if (File.Exists(filename))
                    {
                        Console.WriteLine(filename);
                        isFilePath = true;
                    }
                }
                else
                {
                    throw new FileNotFoundException("File not found", s);
                }
            }
        }

答案 5 :(得分:0)

试试这个: 更快:

 string s = @"C:\Users\Admin\Documents\report2011.docx: My Report 2011";
            string path = Path.GetDirectoryName(s) + s.Split(new char[] { ':' }) [1];
            Console.WriteLine(path); //C:\Users\Admin\Documents\report2011.docx

您需要导入System.IO

答案 6 :(得分:-1)

你可以使用split:

string[] splitted= myString.Split(':');

然后你得到一个数组,你拿第一个。

var mySplittedString = splitted[0]

如果您需要更多相关信息,请查看here

编辑:在你的情况下,你得到一个大小至少为3的数组,所以你需要分割[0]和分割[1]