我有个大问题。我需要将两个.txt文件合并到第三个文件中,每个文件逐行。我需要之前的每一行修剪结束的第一个文件,最后两个字符,并修剪前两个字符的第二个文件。在合并之前,我必须在第一个文件的末尾和第二个文件的开头找到匹配。即,第一档应该是句左部分,第二档是句子的右边部分。示例:
文件1内容(第一行):
很久以前,我们的银河系有一个真正的多事之秋:
文件2内容(第一行):
生命:大约在130亿至80亿年前,它生活艰难而迅速,与其他星系合并,并消耗大量氢形成恒星。
文件3的内容应该是(第一行):
很久以前,我们的银河系有一个真正重要的生命:大约在130亿至80亿年前,它生活艰难而迅速,与其他星系合并,并消耗大量氢形成恒星。
因此,简而言之,在这个文本的例子中,我必须修剪第二个文件中的“事件生命:”从第二个文件到第一个和第二个文件的最后两个,最后将第一个和第二个文件中的文本合并为第三个文件。提前感谢!
namespace ConsoleApplication1
class Program
{
static void Main()
{
string[] readleft = File.ReadAllLines(@"C:\Users\J\Desktop\files\left.txt");
string[] readright = File.ReadAllLines(@"C:\Users\J\Desktop\files\right.txt");
using (StreamReader swo = new StreamReader(@"C:\Users\J\Desktop\files\left.txt"))
{
//left file is first, second is right and third is output
using (StreamReader swot = new StreamReader(@"C:\Users\J\Desktop\files\right.txt"))
{
for (int x = 0; x < readleft.Length || x < readright.Length; x++)
{
Console.WriteLine("{0}{1}",swo.ReadLine(),swot.ReadLine());
Match m = Regex.Match(swo.ToString(), swot.ToString());
if(m.Success)
Console.WriteLine("Found '{0}' at position '{1}'", m.Value.ToString(), m.Index);
}
}
}
}
}顺便问一下,为什么它给我看的是"System.IO.StreamReader“而不是匹配呢?
发布于 2022-03-27 11:28:55
这是一个很容易理解的简单方法。
var left = "A very long ago, our Milky Way had a truly eventful life: between";
var right = "eventful life: between about 13 and 8 billion years ago, it lived hard and fast, merging with other galaxies and consuming a lot of hydrogen to form stars.";
int common = 0;
for(int i = 1; i < Math.Min(left.Length, right.Length); i++)//Please note that a binary search would be much faster
{
var partToCheck = right.Substring(0,i);
if(left.EndsWith(partToCheck))
{
common = i;
Console.WriteLine($"Common part: '{right.Substring(0,i)}'");
break;
}
}
var merged = left + right.Substring(common);这个指纹
Common part: 'eventful life: between'https://stackoverflow.com/questions/71631325
复制相似问题