gpt4 book ai didi

C# 从字符串拆分中删除最后一个分隔字段

转载 作者:太空狗 更新时间:2023-10-30 01:18:31 25 4
gpt4 key购买 nike

我是一名初学者 c# 程序员,刚刚对我正在构建的应用程序提出了一个快速问题。我的进程读取多个文件,目的是根据文本文件中的 1 或 0 竖线分隔字段去除特定记录。它实际上是文件中的最后一个分隔字段。如果它是 0,我将它写入一个临时文件(稍后将替换我读取的原始文件),如果它是其他任何东西,我不会。不要试图让它太困惑,但文件中有两种类型的记录,一个标题行,然后是一些辅助行。标题行是唯一具有标志的行,因此您可以从下面看出,如果 bool 通过设置为 0 设置为良好记录,它将写入标题记录及其下方的所有支持记录,直到遇到错误在这种情况下,它将否定写入它们,直到下一个好的。

但是,我现在想做的(并且想知道最简单的方法)是如何在没有最后一个竖线分隔字段(即标志)的情况下编写标题记录。由于它应该始终是该行的最后 2 个字符(例如“0|”或“1|”,因为前面的管道是必需的),它应该是我的输入记录字符串上的字符串修剪吗?有更容易的方法吗?有没有办法对记录进行拆分但实际上不包括最后一个字段(在本例中为字段 36)?任何意见,将不胜感激。谢谢,

static void Main(string[] args)
{
try
{
string executionDirectory = RemoveFlaggedRecords.Properties.Settings.Default.executionDirectory;
string workDirectory = RemoveFlaggedRecords.Properties.Settings.Default.workingDirectory;

string[] files = Directory.GetFiles(executionDirectory, "FilePrefix*");
foreach (string file in files)
{
string tempFile = Path.Combine(workDirectory,Path.GetFileName(file));
using (StreamReader sr = new StreamReader(file,Encoding.Default))
{
StreamWriter sw = new StreamWriter(tempFile);
string inputRecord = sr.ReadLine();

bool goodRecord = false;
bool isheaderRecord = false;
while (inputRecord != null)
{
string[] fields = inputRecord.Split('|');
if (fields[0].ToString().ToUpper() == "HEADER")
{
goodRecord = Convert.ToInt32(fields[36]) == 0;
isheaderRecord = true;
}

if (goodRecord == true && isheaderRecord == true)
{
// I'm not sure what to do here to write the string without the 36th field***
}
else if (goodRecord == true)
{
sw.WriteLine(inputRecord);
}

inputRecord = sr.ReadLine();
}

sr.Close();
sw.Close();
sw = null;
}
}

string[] newFiles = Directory.GetFiles(workDirectory, "fileprefix*");
foreach (string file in newFiles)
{
string tempFile = Path.Combine(workDirectory, Path.GetFileName(file));
string destFile = Path.Combine(executionDirectory, Path.GetFileName(file));

File.Copy(tempFile, destFile, true);
if (File.Exists(destFile))
{
File.Delete(tempFile);
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}

finally
{
// not done
}
}

最佳答案

你可以这样做的一种方法 - 如果你在代码中的那个点想要的是始终在你的 string[] 中写入除最后一个元素之外的所有元素 - 构造一个 for 在最后一项之前终止的循环:

for (int i = 0; i < fields.Length - 1; i++)
{
// write your field here
}

这是假设您想要单独编写每个字段,并且您想要首先遍历 fields。如果您只想在不使用循环的情况下将单个字符串写入一行,您可以这样做:

var truncatedFields = fields.Take(fields.Length - 1);

然后只需编写您认为合适的 truncatedFields string[] 即可。您可以在一行中完成所有这些的一种方法可能如下所示:

sw.WriteLine(String.Join("|", fields.Take(fields.Length - 1)));

关于C# 从字符串拆分中删除最后一个分隔字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26937773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com