2013-10-15 74 views
-4

我有一个大约3毫米行的文件。每行包含这样的记录:阅读并从文件中提取

1|2|3|4|5|6|7|8|9 

正确的8个分隔符,如'|'在每一行上。我正在寻找一种方法来读取这个文件,然后从每一行中提取最后的'9'号码并将其存储到另一个文件中。

编辑:

确定这里就是我已经做了。

using (StreamReader sr = new StreamReader(filepath)) 
    using (StreamWriter sw = new StreamWriter(filepath1)) 
    { 
     string line = null; 
     while ((line = sr.ReadLine()) != null) 
      sw.WriteLine(line.Split('|')[8]); 
    } 

File.WriteAllLines("filepath", File.ReadAllLines(filepath).Where(l => !string.IsNullOrWhiteSpace(l))); 

读取文件,提取最后的数字,然后写入新文件并清空空白行。最后一位数字是10-15个符号,我想先提取6.我继续阅读并尝试一些,当我完成或有一些问题时,我会再次编辑。

感谢

编辑2: 好吧,这里我先取8位从数量:

sw.WriteLine(line.Substring(0, Math.Min(line.Length, 8))); 

编辑3: 我不知道我该怎么现在左每个号码相匹配文件。我想匹配他们,并看到女巫号码在文件中有多少次。

任何帮助?

+10

可爱。玩的开心。如果您有任何问题,请务必告诉我们。 – noelicus

+0

我刚刚开始寻找一些想法或教程,因为我不是很高级的C#。谢谢 – Goro

+0

祝你好运!一次只能走一步:将它分解成小任务,当你感到高兴时,第一批作品将进入下一阶段。享受:) – noelicus

回答

1
using (StreamReader sr = new StreamReader("input")) 
    using (StreamWriter sw = new StreamWriter("output")) 
    { 
     string line = null; 
     while ((line=sr.ReadLine())!=null) 
      sw.WriteLine(line.Split('|')[8]); 
    } 
+1

这会写一行:) – Damith

+1

嘿,没有想到就打出来了。 :)我现在纠正它。 –

3

我正在寻找一种方法来阅读这个文件,然后提取最后[..]号码只从每一行,并将其存储到另一个文件。

你到底有什么问题吗?在伪代码,这是你想要什么:

fileReader = OpenFile("input") 
fileWriter = OpenFile("output") 

while !fileReader.EndOfFile 
    line = fileReader.ReadLine 
    records[] = line.Split('|') 
    value = records[8] 
    fileWriter.WriteLine(value) 
do 

所以开始实施它,随便问一个问题,你遇到麻烦的任何特定行。我发布的每行代码都包含足够的指针来指出C#代码或用于网页搜索的术语。

+0

太棒了!感谢您的出发点! – Goro

1

使用String.Split()获取数组中的行并获取最后一个元素并将其存储到另一个文件中。重复每一行的过程。

2

你不说你卡在哪里。打破这个问题:

Write and run minimal C# program 

Read lines from file 

Break up one line 

write result line to a file 

你卡在其中的任何一个?然后问一个具体的问题。这种分解技术是许多编程任务的关键,而且一般来说的确是复杂的任务。

您可能会发现string split功能很有用。

1

使用LINQ,你可以做的事情类似下面的筛选数字:

var numbers = from l in File.ReadLines(fileName) 
       let p = l.Split('|') 
       select p[8]; 

,然后将它们写入这样的一个新的文件:

File.WriteAllText(newFileName, String.Join("\r\n", numbers)); 
+0

请注意,有〜3磨坊行! – Damith

+0

这不是问题,File.ReadLines()以惰性方式返回IEnumerable。 – Flea777

+1

不知道如何调用具有〜3磨记录的'String.Join'时会发生什么 – Damith

1

试试这个。 ...

// Read the file and display it line by line. 
System.IO.StreamReader file = 
    new System.IO.StreamReader("c:\\test.txt"); 
while((line = file.ReadLine()) != null) 
{ 
    string[] words = s.Split('|'); 
    string value = words [8] 
    Console.WriteLine (value); 

} 

file.Close(); 
1

因为它是一个巨大的文件,你必须逐行读取它!

public IEnumerable ReadFileIterator(String filePath) 
     { 
      using (StreamReader streamReader = new StreamReader(filePath, Encoding.Default)) 
      { 
       String line; 
       while ((line = streamReader.ReadLine()) != null) 
       { 
        yield return line; 
       } 
       yield break; 
      } 
     } 

     public void WriteToFile(String inputFilePath, String outputFilePath) 
     { 
      using (StreamWriter streamWriter = new StreamWriter(outputFilePath, true, Encoding.Default)) 
      { 
       foreach (String line in ReadFileIterator(inputFilePath)) 
       { 
        String[] subStrings = line.Split('|'); 
        streamWriter.WriteLine(subStrings[8]); 
       } 
       streamWriter.Flush(); 
       streamWriter.Close(); 
      } 
     }