Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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# 有问题。换句话说,在将这些数据作为字符串转储之前对其进行排序。列的宽度是否固定?这些列是否总是由一个或多个空格分隔?列是否会包含空格?是否要按ASCII顺序(例如1,10,11,12…2,3等)或数字顺序(1,2,3…9,10,11)对第六列进行排序?有效_C#_String_Sorting_Richtextbox - Fatal编程技术网

C# 有问题。换句话说,在将这些数据作为字符串转储之前对其进行排序。列的宽度是否固定?这些列是否总是由一个或多个空格分隔?列是否会包含空格?是否要按ASCII顺序(例如1,10,11,12…2,3等)或数字顺序(1,2,3…9,10,11)对第六列进行排序?有效

C# 有问题。换句话说,在将这些数据作为字符串转储之前对其进行排序。列的宽度是否固定?这些列是否总是由一个或多个空格分隔?列是否会包含空格?是否要按ASCII顺序(例如1,10,11,12…2,3等)或数字顺序(1,2,3…9,10,11)对第六列进行排序?有效,c#,string,sorting,richtextbox,C#,String,Sorting,Richtextbox,有问题。换句话说,在将这些数据作为字符串转储之前对其进行排序。列的宽度是否固定?这些列是否总是由一个或多个空格分隔?列是否会包含空格?是否要按ASCII顺序(例如1,10,11,12…2,3等)或数字顺序(1,2,3…9,10,11)对第六列进行排序?有效位数小于4的值是否有前导零?是否忽略第六列中的所有非数字字符?如果是这样的话,为什么以DDDD为特征的产品线出现在它所在的位置?我认为这里需要更多的细节,因为有很多不明确的地方@马特·格里尔:不幸的是,它是这样给我的。这就是为什么我不知道该怎么



有问题。换句话说,在将这些数据作为字符串转储之前对其进行排序。列的宽度是否固定?这些列是否总是由一个或多个空格分隔?列是否会包含空格?是否要按ASCII顺序(例如1,10,11,12…2,3等)或数字顺序(1,2,3…9,10,11)对第六列进行排序?有效位数小于4的值是否有前导零?是否忽略第六列中的所有非数字字符?如果是这样的话,为什么以DDDD为特征的产品线出现在它所在的位置?我认为这里需要更多的细节,因为有很多不明确的地方@马特·格里尔:不幸的是,它是这样给我的。这就是为什么我不知道该怎么处理它(@Bryan:这些列的宽度不是固定的。这些列由多个空格分隔。这些列不应该包含空格。第6列应该按照上述给定的要求进行排序。但是,第2列应该按照数字/字母顺序进行排序。不,小于4个有效数字的数字不需要前导零。不,t它们不会被忽略——需要搜索并检查包含
ABC1111
的行,以查看其中是否有任何值。如果它找到了值(在本例中为“1111”),则将其读取为该值。还有其他问题吗?:)你所说的“ABC1111”没有排序是什么意思?所有的主角都无关紧要吗?为什么
DDDD
在2222和4444之间排序?好的,我使用的是
string[]sortedOneRichTextBox=onerichtTextBox.Text.Split('\n')
将文本拆分为单独的对象,但我考虑的更多的是拆分每个对象的单独属性。i、 e.
myObject.Field1=myString.SubString(0,6.Trim();myObject.Field2=myString.SubString(6,11.Trim()等。我不熟悉子字符串。你能给我举个更具体的例子吗?另外,如果我使用
String.split
拆分文本,我可以按照sortedOneRichTextBox[5]值对它们进行排序吗?然后通过sortedOneRichTextBox[1]值?如果是这样,我该怎么做呢?好的,我使用的是
string[]sortedOneRichTextBox=onerichtTextBox.Text.Split('\n')
将文本拆分为单独的对象,但我考虑的更多的是拆分每个对象的单独属性。i、 e.
myObject.Field1=myString.SubString(0,6.Trim();myObject.Field2=myString.SubString(6,11.Trim()等。我不熟悉子字符串。你能给我举个更具体的例子吗?另外,如果我使用
String.split
拆分文本,我可以按照sortedOneRichTextBox[5]值对它们进行排序吗?然后通过sortedOneRichTextBox[1]值?如果是这样,我该怎么做呢?如果我有更多的案例需要分类:比如说
3333
5555
6666
7777
。。等我是否会创建更多的
if
语句,并使用正确的
return
值将它们按正确的顺序排列?此外,行
var bSignifier=getsengier(b托克[5])上的索引超出范围也有错误那么,只有几个案例需要分类吗?因为这就是我最初读你的问题的方式。如果这是一个普遍的规则,那么我会写得有点不同。一般规则是什么?如果有数字,则按数字排序;如果没有数字,则按字母排序?是的,如果文本结尾出现空行等意外情况,则会出现超出范围的错误。正如评论所说,我在签出时留下了很多错误。实际上,我有一个更大规模的排序情况。。以下是我试图整理的顺序:
RES、0402、0201、0603、0805、1206、1306、1608、3216、2551、1913、1313、2513、5125、2525、5619、3813、1508、6431、2512、1505、2208、1005、1010、2010、0505、0705、1020、1812、2225、5764、4532、1210、0816、0363、SOT
如果我还有更多的病例需要分类:比如
3333
5555
6666
7777
。。等我是否会创建更多的
if
语句,并使用正确的
return
值将它们按正确的顺序排列?此外,行
var bSignifier=getsengier(b托克[5])上的索引超出范围也有错误那么,只有几个案例需要分类吗?因为这就是我最初读你的问题的方式。如果这是一个普遍的规则,那么我会写得有点不同。一般规则是什么?如果有数字,则按数字排序;如果没有数字,则按字母排序?是的,如果文本结尾出现空行等意外情况,则会出现超出范围的错误。正如评论所说,我在签出时留下了很多错误。实际上,我有一个更大规模的排序情况。。以下是我试图得到的顺序:
RES,0402,0201,0603,0805,1206,1306,1608,3216,2551,1913,1313,2513,5125,2525,5619,3813,1508,6431,2512,1505,2208,1005,1010,2010,0505,0705,1020,1812,2225,5764,4532,1210,0816,0363,SOT
TEXT  TEXT-1     227.905  174.994  180  1111
TEXT  DIFTEXT    227.905  203.244  180  9999
TEXT  DIFTEXT2   242.210  181.294  180  2222
TEXT  TEXT-2     236.135  198.644  90   ABC1111
TEXT  SOMETEXT   250.610  201.594  0    DDDD
TEXT  OTHERTEXT  269.665  179.894  180  4444
TEXT  OTHERTEXT  269.665  198.144  180  1111
TEXT  OTHERTEXT  269.665  179.894  180  1111
TEXT  TEXT-1     227.905  174.994  180  1111
TEXT  TEXT-2     236.135  198.644  90   ABC1111   #See note above
TEXT  DIFTEXT2   242.210  181.294  180  2222
TEXT  OTHERTEXT  269.665  198.144  180  4444
TEXT  DIFTEXT    227.905  203.244  180  9999
TEXT  SOMETEXT   250.610  201.594  0    DDDD
private static void SortRichTextBox(RichTextBox richTextBox)
{
    var lineArray = richTextBox.Lines;
    Array.Sort(lineArray, delegate(string a, string b)
    {
        // I omitted Important corner cases like malformed lines,
        // empty strings, and nulls.

        // Additional sort cases can be added to the array as needed.
        var sortOrder = new[] { "1111", "2222", "4444", "9999", "DDDD" };
        var aTokens = a.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        var bTokens = b.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

        var aSignifier = Array.FindIndex(sortOrder, item => aTokens[5].Contains(item));
        var bSignifier = Array.FindIndex(sortOrder, item => bTokens[5].Contains(item));

        // This is where your first rule is being implemented, based on the data
        // from the last column.  The math is unimportant, what matters is the 
        // return being positive vs. negative vs. zero.
        if (aSignifier != bSignifier)
            return aSignifier - bSignifier;

        // This is where your second rule is being implemented, as a backup when
        // the result from the first rule indicates equality.  We're just falling
        // through to ordinary string comparison on the second column.
        return aTokens[1].CompareTo(bTokens[1]);
    });

    // We want to call the setter to get the textbox to update.
    richTextBox.Lines = lineArray;
}
static void Main(string[] args)
{
    string input =
        "TEXT  TEXT-1     227.905  174.994  180  1111\n" +
        "TEXT  DIFTEXT    227.905  203.244  180  9999\n" +
        "TEXT  DIFTEXT2   242.210  181.294  180  2222\n" +
        "TEXT  TEXT-2     236.135  198.644  90   ABC1111\n" +
        "TEXT  SOMETEXT   250.610  201.594  0    DDDD\n" +
        "TEXT  OTHERTEXT  269.665  179.894  180  4444\n" +
        "TEXT  OTHERTEXT  269.665  198.144  180  1111";

    string[] lines = input.Split('\n');
    string[][] grid = new string[lines.Length][];
    for (int i = 0; i < lines.Length; i++)
    {
        grid[i] = lines[i].Split((char[])null, StringSplitOptions.RemoveEmptyEntries); // split on whitespace
    }

    IEnumerable<string[]> results = grid
        .OrderBy(gridRow => TransformColumn6(gridRow[5]))
        .ThenBy(gridRow => gridRow[1]);

    foreach (string[] gridRow in results)
    {
        Debug.WriteLine(string.Join(" ", gridRow));
    }
}

private static string TransformColumn6(string input)
{
    if (char.IsDigit(input[0]))
    {
        // string is a bunch of numbers, use as-is.
        return input;
    }

    int digitIndex = input.IndexOfAny(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' });
    if (digitIndex == -1)
    {
        // string has no numbers, use as-is, will be sorted in alphabetical order after all the numbers.
        return input;
    }

    // string has a number, remove the stuff at the beginning.
    return input.Substring(digitIndex);
}
TEXT OTHERTEXT 269.665 198.144 180 1111 
TEXT TEXT-1    227.905 174.994 180 1111 
TEXT TEXT-2    236.135 198.644 90  ABC1111 
TEXT DIFTEXT2  242.210 181.294 180 2222 
TEXT OTHERTEXT 269.665 179.894 180 4444 
TEXT DIFTEXT   227.905 203.244 180 9999 
TEXT SOMETEXT  250.610 201.594 0   DDDD