Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将列重新排列为txt文件c#_C#_Streamwriter - Fatal编程技术网

将列重新排列为txt文件c#

将列重新排列为txt文件c#,c#,streamwriter,C#,Streamwriter,我有多个列,我想重新排序到一个txt文件中,到目前为止,第一列插入的权利,但我希望下一列是在一边,他们继续写在最后。 这就是我目前所拥有的 StreamReader sr = new StreamReader(file.FullName, System.Text.Encoding.GetEncoding("iso-8859-1")); List <Campos> listaEsquemaEntrada = LeerXML(RutaArchivoConfig); v

我有多个列,我想重新排序到一个txt文件中,到目前为止,第一列插入的权利,但我希望下一列是在一边,他们继续写在最后。 这就是我目前所拥有的

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 |Tipo de Comprobante
111100101   |APE
111150012   |APE
111150016   |APE
111150028   |APE
111150039   |APE
116150101   |APE
116150101   |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);
var file=file.ReadAllLines(@“c:\temp\file.txt”);
for(int i=0;i
当然,如果在第一次写入文件之前,您同时拥有
第一个
第二个
(如
列表
s、数组、
IEnumerable
等),那么只需进行合并即可;无需重新读取该文件。如果您希望有一个修改以前编写的现有文件的流程(例如昨天,当您没有第二列数据时),那么我只需要将其放入


如果您的文件是海量的,您可以更多地参与一个文件的渐进式读取(请参见
file.ReadLines
),以及另一个文件的渐进式写入(
StreamWriter
等),这样您就不会将整个文件缓冲到内存中。。但是,如果你谈论的是一个小于(比如)10兆字节的文件,那么就用简单的方法,只需全部读取、修改、全部写入即可

WriteLine在输出中添加一个换行符。你需要使用Write,当一行结束时,你可以调用WriteLine empty来开始新行。这是一个迭代,第一列被插入,第二列在第一列全部出现之后,我一次不插入一个单元格,我已经在第二个foreach中尝试了Write方法,但是它仍然在第一个foreach的底部。如果我想要的话,完全写第一列,然后写第二个加上一个分隔符,在这种情况下,我不能逐行写,因为我从一个xml中获取我想要获取的列的位置,并将其传输到txt,基本上我有一个包含多个列的txt,我只想选择几个列并将它们写入一个新的txt文件,也许还有另一种方法我看不到问题是列的数量及其变量,有时我需要在不同的位置得到3列,然后我可能需要在另一个位置得到2列,我不能声明数组,因为我不知道列的数量或位置,然后你需要读取文件,在选项卡上拆分,在写出来时重新排列列。我只能回答问题中提出的情况。我只是以声明数组为例;您有列表-它们可以传递到WriteAlline。你错过了我要说的要点:如果你想让一个文本文件变成一个不同的形状,你可以全部阅读,通过混合新旧数据创建一个新的文件,然后再写一次。如果你想重新创建一个数据库,有更好的方法。。例如,如果是一个大文件,使用数据库
StringBuilder
比连接更可取;就这一点而言,不需要字符串生成器或字符串concat;您只需按照相关顺序编写字符串。stringbuilder充其量只能代表一个边际的改进,但除此之外,它完全是这个答案的补充
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);