gpt4 book ai didi

c# - 笛卡尔积或 2 个大文本文件的最佳方法

转载 作者:行者123 更新时间:2023-12-04 14:46:46 25 4
gpt4 key购买 nike

我遇到问题,我想将 2 个大文本文件合并在一起,并使用 2 个输入文件的笛卡尔积生成新文件。我确实知道代码的外观,但不确定使用哪种语言来构建这样的实用程序。我有 Windows 服务器,我熟悉 C#、Shell 脚本。

注意:文件 1 可以大约 20 MB,文件 2 可以包含大约 6000 条记录。所以我想要实现的是在新文件中复制 20MB 数据 6000 次。

下面是我的文件的样子的小例子

文件1

Head-A-AA-AAA
Child-A1-AA1-AAA1
Child-A2-AA2-AAA2
Child-A3-AA3-AAA3
Head-B-BB-BBB
Child-B1-BB1-BBB1
Child-B2-BB2-BBB2
Child-B3-BB3-BBB3

文件2

Store1
Store2
Store3

预期的输出文件

Store1
Head-A-AA-AAA
Child-A1-AA1-AAA1
Child-A2-AA2-AAA2
Child-A3-AA3-AAA3
Head-B-BB-BBB
Child-B1-BB1-BBB1
Child-B2-BB2-BBB2
Child-B3-BB3-BBB3
Store2
Head-A-AA-AAA
Child-A1-AA1-AAA1
Child-A2-AA2-AAA2
Child-A3-AA3-AAA3
Head-B-BB-BBB
Child-B1-BB1-BBB1
Child-B2-BB2-BBB2
Child-B3-BB3-BBB3
Store3
Head-A-AA-AAA
Child-A1-AA1-AAA1
Child-A2-AA2-AAA2
Child-A3-AA3-AAA3
Head-B-BB-BBB
Child-B1-BB1-BBB1
Child-B2-BB2-BBB2
Child-B3-BB3-BBB3

正在寻找建议,如果带有 Windows 服务的 C# 代码可以达到目的,或者我是否需要使用任何其他工具/实用程序/脚本?

编辑:在 C# 代码下方创建。但是生成 150 GB 的输出文件需要几个小时。我正在寻找更快的方法。我正在从文件 1 中获取内容并将其复制到第二个文件中的每条记录

FileInfo[] fi;
List<FileInfo> TodaysFiles = new List<FileInfo>();
string PublishId;
DirectoryInfo di = new DirectoryInfo(@"\\InputPath");

fi = di.GetFiles().Where(file => file.FullName.Contains("TRANSMIT_MASS")).ToArray();

foreach (FileInfo f in fi)
{
string[] tokens = f.Name.Split('_');
if(tokens[2] == DateTime.Now.AddDays(1).ToString("MMddyyyy"))
{
PublishId = tokens[0];
string MACSFile = @"\\OutputPath\\" + PublishId + ".txt";
string path =f.FullName;

string StoreFile = di.GetFiles().Where(file => file.Name.StartsWith(PublishId) && file.Name.Contains("SUBS")).Single().FullName;

using (FileStream fs = File.Open(StoreFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
using (StreamWriter outfile = new StreamWriter(MACSFile))
{
String StoreNumber;
while ((StoreNumber = sr.ReadLine()) != null)
{
Console.WriteLine(StoreNumber);
if (StoreNumber.Length > 5)
{
using (FileStream fsProfile = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (BufferedStream bsProfile = new BufferedStream(fsProfile))
using (StreamReader srProfile = new StreamReader(bsProfile))
{
outfile.WriteLine(srProfile.ReadToEnd().TrimEnd());

}

}

}
}
}

}
}

最佳答案

您提到了 shell 脚本。这是一个有效的 shell 示例:

while read line; do
echo "$line" >> Output
cat File1 >> Output
done < File2

此处 File2 的行被循环遍历并与整个 File1 一起写入任意输出文件 Output

将其保存在本地文件 something.sh 中并运行 sh something.sh 即可轻松运行。

关于c# - 笛卡尔积或 2 个大文本文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69890316/

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