【问题标题】:C# How to get multiple elements in textfile with in basics forC#如何在基础上获取文本文件中的多个元素
【发布时间】:2017-12-12 21:28:42
【问题描述】:

这是我想使用的文件数据,我对 python 更熟悉,但在这里找不到我需要的解决方案。感谢您的帮助。

价格:

一些卖“东西 1”,价格是 20 英镑
一些卖“东西 2”,价格是 40 英镑
一些卖“东西 3”,价格是 60 英镑
一些卖“东西 4”,价格是 80 英镑
有些卖“东西 5”,价格是 100 英镑

using System;
using System.IO;

namespace CalcPrices
{
    internal class Program
    {
        private static void Main()
        {
            string[] lines = File.ReadAllLines(
                @"C:\Users\Eggii\Desktop\code\c# katse\GoodsPrices\GoodsPrices\bin\Debug\PriceOfSoldGoods.txt");

            for (int i = 0; i < lines.Length; i++)
            {
                string[] line = lines[i].Split();

                for (int j = 0; j < line.Length; j++)
                {
                    Console.WriteLine(line[6]);


                    // Output should be something like:
                    // 20
                    // 40
                    // 60
                    // 80
                    // 100
                    // because I want every 7th element in line 
                }
            }
        }   
    }
}

【问题讨论】:

  • 尝试用空格分割。看起来像这样string[] line = lines[i].Split(' ')

标签: c# for-loop get readlines


【解决方案1】:

你需要用空格分割行并删除内循环:

using System;
using System.IO;

namespace CalcPrices
{
    internal class Program
    {
        private static void Main()
        {
            string[] lines = File.ReadAllLines(
                @"C:\Users\Eggii\Desktop\code\c# katse\GoodsPrices\GoodsPrices\bin\Debug\PriceOfSoldGoods.txt");

            for (int i = 0; i < lines.Length; i++)
            {
                string[] line = lines[i].Split(' ');
                Console.WriteLine(line[6]);
            }
        }
    }
}

如果您想将所有数据读入一行,那么您需要为此更改代码:

    ...
    internal class Program
    {
        private static void Main()
        {
            string line = File.ReadAllText(
                @"C:\Users\Eggii\Desktop\code\c# katse\GoodsPrices\GoodsPrices\bin\Debug\PriceOfSoldGoods.txt");

            string[] splitLines = line.Split(' ');
            for (int j = 6; j < line.Length; j += 8)
            {
                Console.WriteLine(line[j]);
            }
        }
    }

【讨论】:

  • int j = 6 帮助了我,所以我不得不更改第二个 for loop ,for (int j = 6; line.Length - 1 &gt; j; j++) { Console.WriteLine(line[j]); } 但在这种情况下,无论是 .split() 还是 .split(' ') 因为两者都只删除单词之间的空格?!?!
  • @Eggii 是的,在这两种情况下,它都会删除单词之间的空格分隔,see。所以你可以取代表你的价格价值的词:20,40...
【解决方案2】:

改变这个:

string[] line = lines[i].Split();

为此:

string[] line = lines[i].Split(' ');

这样做会用空格分隔符分割字符串。

【讨论】:

    【解决方案3】:

    这是你需要做的:

    string[] lines = File.ReadAllLines(@"C:\Users\Eggii\Desktop\code\c# katse\GoodsPrices\GoodsPrices\bin\Debug\PriceOfSoldGoods.txt");
    foreach(string line in lines)
    {
        Console.WriteLine(line.Split(new[] { "price is " }, StringSplitOptions.None)[1].Replace(" £", ""));
    }
    

    【讨论】:

      【解决方案4】:

      所以我添加了一些我的结论,也许它可以帮助某人。这是文本顶部标题“价格:”的问题并导致问题,因为该字符串对于for-loop (IndexOutOfRange) 来说太短了。所以在这种情况下,我自己更正的代码可以正常工作。

      using System;
      using System.IO;
      
      namespace CalcPrices
      {
          internal class Program
          {
              private static void Main()
              {
                  string[] lines = File.ReadAllLines(
                      @"C:\Users\Eggii\Desktop\code\c# katse\GoodsPrices\GoodsPrices\bin\Debug\PriceOfSoldGoods.txt");
      
                  for (int i = 0; i < lines.Length; i++)
                  {
                      string[] line = lines[i].Split();
      
                      for (int j = 6; j < line.Length-1; j++)
                      {
                          Console.WriteLine(line[j]);
                      }
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-09-22
        • 1970-01-01
        • 2018-11-08
        • 1970-01-01
        • 2014-07-14
        • 2018-06-21
        • 1970-01-01
        • 2019-10-19
        • 1970-01-01
        相关资源
        最近更新 更多