问题描述
我有多列,我想重新排序到txt文件中,到目前为止,第一列已正确插入,但我希望下一列在侧面,它们一直在末尾书写。 这是我到目前为止所拥有的
WITH calling_time AS
(SELECT fe.date,ti.call_time,ti.call_duration,count(disTINCT user_id) AS CALLED
FROM call_log clo
INNER JOIN loging fe
ON clo.user_id = fe.id
INNER JOIN loging_communication ti
ON fe.user_id = ti.id
WHERE clo.date_call >= dateadd(DAY,-90,getdate())::date
GROUP BY 1,2,3),look_up AS
(SELECT MAX(date) date,a.call_time,a.call_duration,cast(a.call_time AS varchar(10)) +
'_' +
cast(a.call_duration AS varchar(10)) combine_time,b.count[total_call]
FROM calling_time a
INNER JOIN
(SELECT call_time,call_duration,count(*) COUNT
FROM calling_time
GROUP BY call_time,call_duration) b
ON a.call_time = b.call_time
AND a.call_duration = b.call_duration
GROUP BY a.call_time,b.count)
SELECT * FROM look_up
但是我不断得到这个
StreamReader sr = new StreamReader(file.FullName,System.Text.Encoding.GetEncoding("iso-8859-1"));
List <Campos> listaEsquemaEnTrada = LeerXML(RutaArchivoConfig);
var lista = File.ReadAllLines(file.FullName);
string Separador = ObtenerSeparador(RutaArchivoConfig);
int filaInicial = ObtenerLineaInicial(RutaArchivoConfig);
List<string> ListaFinal = new List<string>();
bool PrimeraIteracion = true;
foreach (Campos campos in listaEsquemaEnTrada)
{
if (campos.columna != 99)
{
using (System.IO.StreamWriter ArchivoSalida =
new System.IO.StreamWriter(RutaOrigen + "\\" + "nuevoArchivo.txt",true))
{
if (PrimeraIteracion)
{
foreach (string line in lista)
{
ArchivoSalida.WriteLine(line.Split(Char.Parse(Separador))[campos.columna - 1]);
}
PrimeraIteracion=false;
}
else
{
foreach (string line in lista)
{
ArchivoSalida.WriteLine(Separador + line.Split(Char.Parse(Separador))[campos.columna - 1]);
}
}
}
}
else
{
continue;
}
}
我想要这样的东西:
C�digo de la Cuenta Contable
111100101
111150012
111150016
111150028
111150039
116150101
116150101
|Tipo de Comprobante
|APE
|APE
解决方法
是的,这就是文本文件的工作方式。如果您已将一列写入文本文件:
var first = new [] { "header","line1","line2","line3" };
File.WriteAllLines(@"c:\temp\file.txt",first);
您还想写另一列
var second = new [] { "header2","newline1","newline2","newline3" };
读取整个文件,在每一行的末尾添加新的位,然后再次写入整个文件,可能是最简单的:
var file = File.ReadAllLines(@"c:\temp\file.txt");
for(int i = 0; i < file.Length; i++)
file[i] += '\t' + second[i]; //add the second column after the first,with a tab
File.WriteAllLines(@"c:\temp\file.txt",file);
当然,如果您在第一次写入文件之前就同时拥有first
和second
(如List
,数组,IEnumerable<string>
等),然后进行结合;无需重新读取文件。如果您希望修改以前编写的现有文件(例如,昨天,当您没有第二列数据时),我只想输入
如果文件很大,则可以更多地参与逐步读取一个文件(请参阅File.ReadLines
)和逐步写入另一个文件(StreamWriter
等),因此您不会将整个内容缓冲到内存中。但是,如果您要谈论的文件小于10 MB,请采用简单的方法,然后将其全部读取,修改,全部写入