Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.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
C# 使用Foreach的StreamWriter排序_C#_Foreach_Streamwriter - Fatal编程技术网

C# 使用Foreach的StreamWriter排序

C# 使用Foreach的StreamWriter排序,c#,foreach,streamwriter,C#,Foreach,Streamwriter,我有一些文本包含许多值,如下所示: PartNumber Description Amount Fid1 blahblahblah 999934109 0603 moreblah 12 exclude ehh? 981 FID5 fillertext 123 fid2 fillertext 123 fid fillertext

我有一些文本包含许多值,如下所示:

PartNumber    Description    Amount
Fid1          blahblahblah   999934109
0603          moreblah       12
exclude       ehh?           981
FID5          fillertext     123
fid2          fillertext     123
fid           fillertext     123
0603          fillertext     123
0603          fillertext     123
0603          fillertext     123
0402          fillertext     123
0402          fillertext     123
//etc.........etc............etc
我想打印出包含“FID”的值

但是,当我这样做时,它会将它们打印出来,如下所示:

1: Fid1 999934109 blahblahblah
2: FID5 123 fillertext
3: fid2 123 fillertext
4: fid 123 fillertext
我想用数字打印出来。。所以像这样:

1: fid 123 fillertext
2: Fid1 999934109 blahblahblah
3: fid2 123 fillertext
4: FID5 123 fillertext

有没有一种简单、快捷的方法可以做到这一点?

您可能可以对列表使用LINQ查询的orderby子句:

int garbage;
from line in theList
where line.PartNumber.ToUpper().StartsWith("FID")
orderby (Int32.TryParse(line.PartNumber.Substring(3),garbage)) ? (Int32.Parse(line.PartNumber.Substring(3))) : 0
select line;

在foreach中也不需要if语句。

行可以存储在排序列表中。键可以是数字,对于不存在的数字,可以使用零,或者键可以是整个“FID”

我不确定FIDs是否会重复,这将使这种方法不可行。此外,如果文件很大,也可能不可行


修正了Jim的答案,使其有效:另请参见


那么,它到底是如何编码的。。这似乎不起作用,它的要点是,它的返回给你一个IEnumerable,其中T是你正在处理的任何类型。因此您可以这样做:var q=上面显示的查询;foreach(q中的var qi)
TryParse
is有一个错误:方法Try Parse'takes 1 argumentsD'oh没有重载。我的错在那一点上。TryParse为您提供一个bool,但期望一个变量将其值放入其中。我们可以编写一个helper方法,或者只给它一个一次性变量。在查询之前:int crap;snip Int32.TryParse(line.PartNumber.Substring(3),crap)snipdid你难道不直接问这个问题(或者一个几乎相同的问题)?——我认为这个问题的答案是一样的。@Reddog:这是在处理字典及其键。键是字符串,您需要将其分解为组件并根据这些组件进行排序。。。概念是一样的。
int garbage;
from line in theList
where line.PartNumber.ToUpper().StartsWith("FID")
orderby (Int32.TryParse(line.PartNumber.Substring(3),garbage)) ? (Int32.Parse(line.PartNumber.Substring(3))) : 0
select line;
using System;
using System.Collections.Generic;
using System.Linq;

namespace TestThat
{
    class MainClass
    {
        public static void Main (string[] args)
        {
            var theList = new [] {
                new { PartNumber="FID34" }
            };

            var result = theList
                .Where (line => line.PartNumber.StartsWith("FID", StringComparison.CurrentCultureIgnoreCase)
                .OrderBy (line =>
                {   
                    int pnumber;
                    return Int32.TryParse(line.PartNumber.Substring(3), out pnumber)
                         ? pnumber 
                         : 0;
                });

        }
    }
}