C#编辑文件中的字符串-删除字符(000)
我是C#方面的新手,但我需要解决一个问题。 我在文件夹中有几个文本文件,每个文本文件都有以下结构: IDNR000000100 姓名 姓氏姓氏 性M 。。。。等等 从文件夹加载所有文件,这是没有问题的,但我需要删除IdNr中的“零”,所以删除000000和100保留在那里。在此文件保存之后每个文件都有其他IdNr,因此更难:( 是的,可以手动编辑每个文件,但当我有3000个文件时,这不好:) C#one算法可以删除000000,只留下100吗 谢谢大家。 瓦茨拉夫 所以,谢谢大家强> 但最后我有了这个代码:-): 名称空间名称 { 公共部分类Form1:Form { 公共表格1() { 初始化组件(); }C#编辑文件中的字符串-删除字符(000),c#,file,edit,C#,File,Edit,我是C#方面的新手,但我需要解决一个问题。 我在文件夹中有几个文本文件,每个文本文件都有以下结构: IDNR000000100 姓名 姓氏姓氏 性M 。。。。等等 从文件夹加载所有文件,这是没有问题的,但我需要删除IdNr中的“零”,所以删除000000和100保留在那里。在此文件保存之后每个文件都有其他IdNr,因此更难:( 是的,可以手动编辑每个文件,但当我有3000个文件时,这不好:) C#one算法可以删除000000,只留下100吗 谢谢大家。 瓦茨拉夫 所以,谢谢大家 但最后我有了这
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");
}
}
}
}
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 000000 100”?如果没有这些信息,很难回答
编辑:如果格式严格,这里有一个简单但有效的方法应该可以工作:
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);
}
}
var files=Directory.EnumerateFiles(路径“*.txt”,SearchOption.TopDirectoryOnly);
foreach(文件中的var fPath)
{
String[]oldLines=File.ReadAllLines(fPath);//当文件不是很大时,加载到内存中的速度更快
String key=“IdNr”;
如果(oldLines.Length!=0)
{
IList换行符=新列表();
foreach(旧行中的字符串行)
{
字符串换行符=行;
if(行包含(键))
{
int numberArrangeStart=line.IndexOf(key)+key.Length;
int numberRangeEnd=line.IndexOf(“,numberRangeStart”);
字符串numberStr=行.子字符串(numberRangeStart,numberRangeEnd-numberRangeStart);
int number=int.Parse(numberStr);
不带零的字符串=number.ToString();
换行符=行。替换(键+数字TR,键+不带零);
换行。添加(行);
}
换行符。添加(换行符);
}
writeAllines(fPath,换行符);
}
}
您可以使用int.Parse
:
int number = int.Parse("000000100");
String withoutzeros = number.ToString();
根据您的读取/保存文件问题,文件是否包含多条记录,是标题还是每条记录都是键和值列表,如“IdNr 000000 100”?如果没有这些信息,很难回答
编辑:如果格式严格,这里有一个简单但有效的方法应该可以工作:
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);
}
}
var files=Directory.EnumerateFiles(路径“*.txt”,SearchOption.TopDirectoryOnly);
foreach(文件中的var fPath)
{
String[]oldLines=File.ReadAllLines(fPath);//当文件不是很大时,加载到内存中的速度更快
String key=“IdNr”;
如果(oldLines.Length!=0)
{
IList换行符=新列表();
foreach(旧行中的字符串行)
{
字符串换行符=行;
if(行包含(键))
{
int numberArrangeStart=line.IndexOf(key)+key.Length;
int numberRangeEnd=line.IndexOf(“,numberRangeStart”);
字符串numberStr=行.子字符串(numberRangeStart,numberRangeEnd-numberRangeStart);
int number=int.Parse(numberStr);
不带零的字符串=number.ToString();
换行符=行。替换(键+数字TR,键+不带零);
换行。添加(行);
}
换行符。添加(换行符);
}
writeAllines(fPath,换行符);
}
}
以下是您希望采取的步骤:
- 循环每个文件
- 逐行读取文件
- 对于“”上拆分的每一行,从第二个元素中删除前导零
- 将新行写回临时文件
- 处理完所有行后,删除原始文件并重命名临时文件
- 做下一个文件
您可以使用以下方法删除前导零:
string s = "000000100";
s = s.TrimStart('0');
以下是您希望采取的步骤:
- 循环每个文件
- 逐行读取文件
- 对于“”上拆分的每一行,从第二个元素中删除前导零
- 将新行写回临时文件
- 处理完所有行后,删除原始文件并重命名临时文件
- 做下一个文件
您可以使用以下方法删除前导零:
string s = "000000100";
s = s.TrimStart('0');
使用TrimStart
var trimmedText = number.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", ""));
}
它假定您的文件有一个.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;
}
}
}
简单地说,从文件中读取每个令牌并使用以下方法:
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;
}
}
}
是的,这很容易,但是你自己尝试过什么吗?是的,这很容易,但是你自己尝试过什么吗?对不起,…每个文件都有其他IdNr:-(@Messiah1985:添加了一个示例性实现。谢谢!!!:-)。。。“Directory.EnumerateFilesL只能使用Framework 4.5?因此,当我使用Visual Studio C#2008时,我运气不好:)…但这没问题…我安装了C#2012..但谢谢!!:-)已经在NET 4中可用,但在35中不可用。但是它有