我是C#的新手,但我需要解决一个问题。 我在Folder中有几个文本文件,每个文本文件都有这种结构:
IdNr 000000100
名称名称
姓氏姓氏
性别M
....等......
从文件夹加载所有文件,这没有问题,但我需要在IdNr中删除“零”,所以删除000000和100离开那里。保存此文件后。 每个文件都有其他IdNr ,因此,它更难:(
是的,有可能每个文件手动编辑,但是当我有3000个文件时,这不是很好:) 可以C#one算法,可以将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");
}
}
}
}
谢谢大家! ;)
答案 0 :(得分:1)
您可以使用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);
}
}
答案 1 :(得分:0)
以下是您要采取的步骤:
(你可以通过将每个文件全部读入内存来避免临时文件部分,但根据你的文件大小,这可能不实用)
您可以使用以下内容删除前导零:
string s = "000000100";
s = s.TrimStart('0');
答案 2 :(得分:0)
使用TrimStart
var trimmedText = number.TrimStart('0');
答案 3 :(得分:0)
这应该这样做。它假定您的文件具有.txt扩展名,并从每个文件中删除所有出现的“000000”。
foreach (string fileName in Directory.GetFiles("*.txt"))
{
File.WriteAllText(fileName, File.ReadAllText(fileName).Replace("000000", ""));
}
答案 4 :(得分:0)
简单地说,从文件中读取每个标记并使用此方法:
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));