2017-04-03 43 views
0

我在读取文本文件时出现问题,在此处我跳过第一行,然后将其放入char数组中。读取文本文件时出现问题,我跳过1行并将其置于char数组中

如果我想将它放入一个看起来像下面的代码的数组中,操作非常简单,但它又应该是一个char数组。

var content = File.ReadAllLines("Labyrint.txt"); 
File.WriteAllLines("Labyrint.txt", content.Skip(1).ToArray()); 
+1

你面临的问题是什么?此外,您提供的代码中没有字符数组 – Vikhram

+0

您是否只想在单行中写入所有行,但是跳过的行只有一行? –

+0

C#中的char []具有相对较少的用途。你的意思是你想要一个'string'中的所有行吗?你会如何使用它? – crashmstr

回答

0

要做到这一点,你必须手动读取LL使用流读者这样

编辑 更正皮克Systax

StringBuilder sb = new StringBuilder(); 
using(StreamReader sr = new StreamReader("Labyrint.txt")){ 
    sr.ReadLine(); //skip first Line 
    while(sr.Peek()!=-1){ 
     sb.AppendLine(sr.ReadLine()); 
    } 
} 
char[] content = sb.ToString().ToCharArray(); 

File.WriteAllText("Labyrint.txt",sb.ToString()); 
+0

感谢您的回复,但是我在“peek”一词下面出现一条红线,表示“StreamReader不包含peek的定义,并且没有可以找到接受类型StreamReader的第一个参数的扩展方法(您是否缺少using指令或一个程序集引用)我看不到使用了我缺少的指令我有两个系统和系统IO吗?顺便说一下,你能解释每一行代码,所以它清楚地知道它是什么。 – cop77

+1

@ cop77利用它... – MrZander

+0

感谢MrZander帮助我们完成代码的工作,但它与我提出的解决方案有着完全相同的问题,代码首次运行时工作正常,它删除了第一行,但下次启动程序会删除下一行,意思是每次程序运行时删除一行并保存文件?我希望它导入文件并删除第一行但不保存文件行删除。我怎么做? – cop77

0

其实我没有找到一个方法来行让它工作,但问题是它只在第一次运作。之所以第一次启动程序会删除文件中的第一行。但是,文件保存时第一行被删除。所以下次程序启动时,它会删除新的第一行,直到文本文件中没有更多的行。

//Delete the first line in the textfile 
var Labo = File.ReadAllLines("Labyrint.txt"); 
File.WriteAllLines("Labyrint.txt", Labo.Skip(1).ToArray()); 
//import the textfile after the first line has been deleted 
     string content = File.ReadAllText("Labyrint.txt", Encoding.UTF8); 

     // Use ToCharArray to convert string to array. 
     char[] array = content.ToCharArray(); 
0

好了一天后,沮丧和不同的方法我终于找到了解决方案。除了找到解决方案之外,我还设法让代码变得非常简单,所以这是一个美好的一天。你们在下面找到正确的解决办法:

using System; 
using System.Collections.Generic; 

using System.Linq; 

using System.Text; 

using System.IO; 

using System.Threading.Tasks; 

namespace ConsoleApplication25 

{ 
class Program 
{ 

    static char[] values; 
    static void Main(string[] args) 
    { 
     //Increase Console Buffer Height 
     Console.BufferHeight = Int16.MaxValue - 1; 

     foreach (var line in File.ReadAllLines("Labyrint.txt", Encoding.UTF8).Skip(1)) 
     { 
      values = line.ToCharArray(); 

      Console.WriteLine(values); 

     } 

     //finds the character on index 0 
     Console.WriteLine(values[0]); 

     } 
    } 
} 
+0

好吧,我的速度太快了,不能自拔,因为如果你不是0而试图获得56的索引,那么它会抛出异常。如果你在foreach循环外面说Console.WriteLine(values),它只显示输出窗口中的最后一行。任何知道如何将foreach循环的最终结果保存在字符串变量中的人,而不是现在只保存最后一行的人? - – cop77

0

我不知道如果我是按照这个线索,或者如果人们只是没有任何线索唯一可以做的呢? 无论如何,我想出了一个解决方案,现在几乎工作。这意味着文本文件中的第一行会被跳过,然后在stringbuilder的帮助下将它放置在char数组中。然而,并非所有事情都是完美的,因为当我通过索引号查找元素时,它们应该是2个地方。 Forinstens角色B应该在索引21,但由于某种原因,它在索引23?我检查了文本文件,并且在文本文件中的任何行之后没有空格,并且构建器没有修剪方法,因此任何人都有任何建议?你们发现我的代码如下:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Threading.Tasks; 


namespace ConsoleApplication25 
{ 



class Program 
{ 

    static char[] FloridaArray; 
    static string DenverString; 

    static void Main(string[] args) 
    { 
     //Increase Console Buffer Height 
     Console.BufferHeight = Int16.MaxValue - 1; 

     DenverString = ConvertStringArrayToString(); 
     FloridaArray = DenverString.ToArray(); 
     Console.WriteLine(DenverString); 
     Console.WriteLine(FloridaArray[43]); 
    } 

    static string ConvertStringArrayToString() 
    { 
     // Concatenate all the elements into a StringBuilder. 
     StringBuilder builder = new StringBuilder(); 
     foreach (var value in File.ReadAllLines("Labyrint.txt", Encoding.UTF8).Skip(1)) 
     { 

      builder.Append(value); 
      builder.AppendLine(); 
     } 

     return builder.ToString(); 

    } 
} 
} 
相关问题