簡體   English   中英

C#編輯文件中的字符串-刪除字符(000)

[英]C# Edit string in file - delete a character (000)

我是C#的新手,但我需要解決一個問題。 我在Folder中有幾個文本文件,每個文本文件都具有以下結構:

編號000000100

姓名姓名

姓氏姓氏

性愛M

....等等...

從Folder加載所有文件,這沒有問題,但是我需要在IdNr中刪除“零”,因此刪除000000和100保留在那里。 此文件保存后。 每個文件都有另一個IdNr ,因此,:(

是的,可以手動編輯每個文件,但是當我有3000個文件時,這不是很好:) C#可以使用一種算法,該算法可以刪除這000000條並僅保留數字100嗎?

謝謝你們。 瓦茨拉夫

所以,謝謝大家! 但最后我有了這個代碼:-):

using System.IO;

命名空間名稱{公共局部類Form1:表單{公共Form1(){InitializeComponent(); }

    private void Browse_Click(object sender, EventArgs e)
    {
        DialogResult dialog = folderBrowserDialog1.ShowDialog();
        if (dialog == DialogResult.OK)
            TP_zdroj.Text = folderBrowserDialog1.SelectedPath;

    }

    private void start_Click(object sender, EventArgs e)
    {

       try
       {
           foreach (string file in Directory.GetFiles(TP_zdroj.Text, "*.txt"))
           {
               string text = File.ReadAllText(file, Encoding.Default);

               text = System.Text.RegularExpressions.Regex.Replace(text, "IdNr    000*", "IdNr    ");
               File.WriteAllText(file, text, Encoding.Default);

           }
       }
           catch
       {
           MessageBox.Show("Warning...!");
               return;

           }

        {
            MessageBox.Show("Done");

        }

    }
}

}

謝謝你們 ! ;)

您可以使用int.Parse

int number = int.Parse("000000100");
String withoutzeros = number.ToString();

根據您的讀取/保存文件問題,文件是否包含多個記錄,是標題還是每個記錄都是鍵和值的列表,例如“ IdNr 000000100”? 沒有這些信息,很難回答。

編輯 :這是一種簡單但有效的方法,如果格式嚴格,則應該可以使用:

var files = Directory.EnumerateFiles(path, "*.txt", SearchOption.TopDirectoryOnly);

foreach (var fPath in files)
{ 
    String[] oldLines = File.ReadAllLines(fPath); // load into memory is faster when the files are not really huge
    String key = "IdNr ";
    if (oldLines.Length != 0)
    {
        IList<String> newLines = new List<String>();
        foreach (String line in oldLines)
        {
            String newLine = line;
            if (line.Contains(key))
            {
                int numberRangeStart = line.IndexOf(key) + key.Length;
                int numberRangeEnd = line.IndexOf(" ", numberRangeStart);
                String numberStr = line.Substring(numberRangeStart, numberRangeEnd - numberRangeStart);
                int number = int.Parse(numberStr);
                String withoutZeros = number.ToString();
                newLine = line.Replace(key + numberStr, key + withoutZeros);
                newLines.Add(line);
            }
            newLines.Add(newLine);
        }
        File.WriteAllLines(fPath, newLines);
    }
}

這些是您要采取的步驟:

  • 循環播放每個文件
  • 逐行讀取文件
  • 對於在“”上分割的每一行,並從第二個元素中刪除前導零
  • 將新行寫回到臨時文件
  • 處理完所有行后,刪除原始文件並重命名臨時文件
  • 做下一個文件

(您可以通過將每個文件全部讀入內存來避免使用臨時文件,但是根據文件大小,這可能不切實際)


您可以使用以下方式刪除前導零:

string s = "000000100";
s = s.TrimStart('0');

使用TrimStart

var trimmedText = number.TrimStart('0');

這應該做。 它假定您的文件具有.txt擴展名,並且從每個文件中刪除所有出現的“ 000000”。

foreach (string fileName in Directory.GetFiles("*.txt"))
{
    File.WriteAllText(fileName, File.ReadAllText(fileName).Replace("000000", ""));
}

簡單地,從文件中讀取每個令牌並使用此方法:

var token = "000000100";
var result = token.TrimStart('0');

您可以編寫與此函數類似的函數:

static IEnumerable<string> ModifiedLines(string file) {
    string line;
    using(var reader = File.OpenText(file)) {
        while((line = reader.ReadLine()) != null) {
            string[] tokens = line.Split(new char[] { ' ' });
            line = string.Empty;
            foreach (var token in tokens)
            {
                line += token.TrimStart('0') + " ";
            }
            yield return line;
        }
    }
}

用法:

File.WriteAllLines(file, ModifiedLines(file));

暫無
暫無

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

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