У меня есть два огромных текстовых файла, формат которых указан ниже.
Файл 1:
ID1,20
ID2,20
ID3,30
Файл 2:
ID3,75
ID1,84
ID2,70
Оба этих файла содержат более 200 000 строк. Мне нужно прочитать оба файла и создать третий файл в этом формате:
Файл 3:
ID1,20,84
ID2,20,70
ID3,30,75
ID может быть любой строкой, вводимой пользователем. Третий файл должен быть создан путем сопоставления идентификатора в строках файла 1 с идентификатором в строках файла 2. Я написал код, но создание файла 3 занимает много времени. Данная задача связана с распараллеливанием, поэтому я хочу, чтобы код сэкономил мне как можно больше времени. Предложите более быстрый и эффективный способ решения этой проблемы.
(Вот код, который я использовал)
public void positionCure(string afile,string bfile,string dfile)
{
string alphaFilePath = afile;
List<string> alphaFileContent = new List<string>();
using (FileStream fs = new FileStream(alphaFilePath, FileMode.Open))
using(StreamReader rdr = new StreamReader(fs))
{
while(!rdr.EndOfStream)
{
alphaFileContent.Add(rdr.ReadLine());
}
}
string betaFilePath = bfile;
StringBuilder sb = new StringBuilder();
using (FileStream fs = new FileStream(betaFilePath, FileMode.Open))
using (StreamReader rdr = new StreamReader(fs))
{
while(! rdr.EndOfStream)
{
string[] betaFileLine = rdr.ReadLine().Split(Convert.ToChar(","));
foreach (string alphaline in alphaFileContent)
{
string[] alphaFileLine = alphaline.Split(Convert.ToChar(","));
if (alphaFileLine[0].Equals(betaFileLine[0].ToString()))
{
sb.AppendLine(String.Format("{0}, {1}, {2}", betaFileLine[0], betaFileLine[1], alphaline.Substring(alphaline.IndexOf(Convert.ToChar(","))+1)));
}
}
}
}
using (FileStream fs = new FileStream(dfile, FileMode.Create))
using (StreamWriter writer = new StreamWriter(fs))
{
writer.Write(sb.ToString());
}
}
}