Sql 是否将一组字符串(.txt文件)优雅地附加到另一组字符串(.txt文件)?
这个要求可能看起来有点可笑,但不幸的是,我的小公司迫切需要它,因此,我将为一个好的解决方案给予最大的赏金 我们有一组遗留订单信息存储在.txt文件中。为了将该订单信息导入到新的自定义数据库系统中,我们需要为每一行追加另一个集合中的值 因此,在我的.txt文件中,我有:Sql 是否将一组字符串(.txt文件)优雅地附加到另一组字符串(.txt文件)?,sql,string,algorithm,text,append,Sql,String,Algorithm,Text,Append,这个要求可能看起来有点可笑,但不幸的是,我的小公司迫切需要它,因此,我将为一个好的解决方案给予最大的赏金 我们有一组遗留订单信息存储在.txt文件中。为了将该订单信息导入到新的自定义数据库系统中,我们需要为每一行追加另一个集合中的值 因此,在我的.txt文件中,我有: Trans Date,NorthTotal,NorthSoFar,SouthTotal,SouthSoFar,IsNorthWorkingDay,IsSouthWorkingDay 2012-01-01,21,0,21,0,0,0
Trans Date,NorthTotal,NorthSoFar,SouthTotal,SouthSoFar,IsNorthWorkingDay,IsSouthWorkingDay
2012-01-01,21,0,21,0,0,0
2012-01-02,21,0,21,0,0,0
2012-01-03,21,1,21,1,1,1
...
现在,我在一个.txt文件中也有一组位置,我需要为其添加两列-城市和国家。比如说:
City, Country
London,England
Paris,France
对于我的第一个文本文件中的每一行,我需要在第二个文本文件的一行上追加!因此,对于我的最终结果,使用上述样本数据,我希望:
Trans Date,NorthTotal,NorthSoFar,SouthTotal,SouthSoFar,IsNorthWorkingDay,IsSouthWorkingDay,City,Country
2012-01-01,21,0,21,0,0,0,London,England
2012-01-02,21,0,21,0,0,0,London,England
2012-01-03,21,1,21,1,1,1,London,England
2012-01-01,21,0,21,0,0,0,Paris,France
2012-01-02,21,0,21,0,0,0,Paris,France
2012-01-03,21,1,21,1,1,1,Paris,France
...
目前,我唯一的想法是将这两个文件导入到SQL数据库中,并编写一个复杂的函数将这两个文件附加在一起(因此是我的标记)-当然有人可以救我,并想出一些不会花费一整天的事情!请多谢各位
编辑:我对所有编程语言编写的解决方案持开放态度;但我更喜欢使用DOS或某种可以轻松重新运行的控制台/程序 这里有一个C#中的解决方案。您可以像这样运行它:
joinfiles a.txt b.txt c.txt
其中a.txt是第一个文件,b.txt是第二个文件,c.txt是将要创建的输出文件。它在我的机器上以100 MB/s的速度生成输出,因此速度可能足够快
using System;
using System.IO;
using System.Text;
namespace JoinFiles
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 3)
return;
string[] file1, file2;
try
{
using (var sr1 = new StreamReader(args[0]))
using (var sr2 = new StreamReader(args[1]))
{
file1 = sr1.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
file2 = sr2.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
}
using (var outstream = new StreamWriter(args[2], false, Encoding.Default, 1048576))
{
outstream.WriteLine(file1[0] + "," + file2[0]);
for (int i = 1; i < file2.Length; i++)
for (int j = 1; j < file1.Length; j++)
outstream.WriteLine(file1[j] + "," + file2[i]);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
使用系统;
使用System.IO;
使用系统文本;
名称空间连接文件
{
班级计划
{
静态void Main(字符串[]参数)
{
如果(参数长度!=3)
返回;
字符串[]file1,file2;
尝试
{
使用(var sr1=newstreamreader(args[0]))
使用(var sr2=newstreamreader(args[1]))
{
file1=sr1.ReadToEnd().Split(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
file2=sr2.ReadToEnd().Split(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
}
使用(var outstream=newstreamwriter(args[2],false,Encoding.Default,1048576))
{
outstream.WriteLine(file1[0]+“,“+file2[0]);
for(int i=1;i
这里有一个C#中的解决方案。您可以像这样运行它:
joinfiles a.txt b.txt c.txt
其中a.txt是第一个文件,b.txt是第二个文件,c.txt是将要创建的输出文件。它在我的机器上以100 MB/s的速度生成输出,因此速度可能足够快
using System;
using System.IO;
using System.Text;
namespace JoinFiles
{
class Program
{
static void Main(string[] args)
{
if (args.Length != 3)
return;
string[] file1, file2;
try
{
using (var sr1 = new StreamReader(args[0]))
using (var sr2 = new StreamReader(args[1]))
{
file1 = sr1.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
file2 = sr2.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
}
using (var outstream = new StreamWriter(args[2], false, Encoding.Default, 1048576))
{
outstream.WriteLine(file1[0] + "," + file2[0]);
for (int i = 1; i < file2.Length; i++)
for (int j = 1; j < file1.Length; j++)
outstream.WriteLine(file1[j] + "," + file2[i]);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
}
使用系统;
使用System.IO;
使用系统文本;
名称空间连接文件
{
班级计划
{
静态void Main(字符串[]参数)
{
如果(参数长度!=3)
返回;
字符串[]file1,file2;
尝试
{
使用(var sr1=newstreamreader(args[0]))
使用(var sr2=newstreamreader(args[1]))
{
file1=sr1.ReadToEnd().Split(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
file2=sr2.ReadToEnd().Split(新字符串[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
}
使用(var outstream=newstreamwriter(args[2],false,Encoding.Default,1048576))
{
outstream.WriteLine(file1[0]+“,“+file2[0]);
for(int i=1;i
如果您愿意使用数据库并导入这些文件(这应该不是很难),那么您就不需要“复杂的函数将两者附加在一起”。你只需要像这样简单的交叉连接<代码>从t1、t2中选择t1.*、t2.*
你自己去看看 如果您愿意使用数据库并导入这些文件(这应该不是很难),那么您就不需要“复杂的函数将两者附加在一起”。你只需要像这样简单的交叉连接<代码>从t1、t2中选择t1.*、t2.* 你自己去看看 bash脚本示例
echo -e 'c1\na\nb' > t1
echo -e 'c2\n1\n2' > t2
while read l1;do
read -u 3 l2
echo "$l1,$l2"
done <t1 3<t2
echo-e'c1\na\nb'>t1
echo-e'c2\n1\n2'>t2
读l1时;做
read-U3L2
回显“$l1,$l2”
完成bash脚本示例
echo -e 'c1\na\nb' > t1
echo -e 'c2\n1\n2' > t2
while read l1;do
read -u 3 l2
echo "$l1,$l2"
done <t1 3<t2
echo-e'c1\na\nb'>t1
echo-e'c2\n1\n2'>t2
读l1时;做
read-U3L2
回显“$l1,$l2”
完成您还可以编写一个WSH脚本来完成此操作,并从命令行执行。这里是一个快速的破解(虽然有效,但肯定需要一些改进)。您需要将其保存为vbs文件并在cli上执行,如下所示wscript script.vbs infile1.txt infile2.txt outfile.txt
其中script.vbs是脚本,infie 1和2是输入文件名,outfile.txt是输出文件
Set FSO_In1 = CreateObject("Scripting.FileSystemObject")
Set FSO_In2 = CreateObject("Scripting.FileSystemObject")
Set FSO_Out = CreateObject("Scripting.FileSystemObject")
Set File_Out = FSO_In1.CreateTextFile(Wscript.Arguments.Item(2),2)
Set F1_file = FSO_In1.OpenTextFile(Wscript.Arguments.Item(0),1)
HeaderWritten = False
Header = F1_File.Readline 'Read the first header line from first file
Do While F1_File.AtEndOfStream = False
F1_Line = F1_file.Readline
Set F2_File = FSO_In2.OpenTextFile(Wscript.Arguments.Item(1),1)
if HeaderWritten = False then
Header = Header & "," & F2_File.Readline
File_Out.Writeline(Header)
HeaderWritten = True
else
F2_File.Readline 'Read the first header line from second file and ignore it
end if
Do While F2_File.AtEndOfStream = False
F2_Line = F2_File.Readline
out = F1_Line & "," & F2_Line
File_Out.Writeline(out)
Loop
F2_File.Close
Loop
F1_File.Close
File_Out.Close
您还可以编写一个WSH脚本来执行此操作,并从命令行执行。这里是一个快速的破解(虽然有效,但肯定需要一些改进)。您需要将其保存为vbs文件并在cli上执行,如下所示wscript script.vbs infile1.txt infile2.txt outfile.txt
其中script.vbs是脚本,infie 1和2是输入文件名,outfile.txt是输出文件
Set FSO_In1 = CreateObject("Scripting.FileSystemObject")
Set FSO_In2 = CreateObject("Scripting.FileSystemObject")
Set FSO_Out = CreateObject("Scripting.FileSystemObject")
Set File_Out = FSO_In1.CreateTextFile(Wscript.Arguments.Item(2),2)
Set F1_file = FSO_In1.OpenTextFile(Wscript.Arguments.Item(0),1)
HeaderWritten = False
Header = F1_File.Readline 'Read the first header line from first file
Do While F1_File.AtEndOfStream = False
F1_Line = F1_file.Readline
Set F2_File = FSO_In2.OpenTextFile(Wscript.Arguments.Item(1),1)
if HeaderWritten = False then
Header = Header & "," & F2_File.Readline
File_Out.Writeline(Header)
HeaderWritten = True
else
F2_File.Readline 'Read the first header line from second file and ignore it
end if
Do While F2_File.AtEndOfStream = False
F2_Line = F2_File.Readline
out = F1_Line & "," & F2_Line
File_Out.Writeline(out)
Loop
F2_File.Close
Loop
F1_File.Close
File_Out.Close
您能将这两个文件解释为CSV吗?这将使合并这些文件更容易使用