-1

SO Im は、いくつかの共有コードを作成している間、自分のプロジェクトに固執しました。いくつかの文字列を含むリストがあります。これをフィルタリングしてから、フィルタリングされた文字列を位置で分割します。私はすでにobjective-cでこれを行っていますが、c#でこれを行う方法がわかりません。

Objective-c は次のようになります。

NSPredicate *findStringWithStatusPlanned = [NSPredicate predicateWithFormat:@"SELF contains[c] 'TOMTOM101'"];
        NSArray *filteredArrayOnStatusPlanned = [trackTraceContentFiltered filteredArrayUsingPredicate:findStringWithStatusPlanned];
        NSLog(@"%@",filteredArrayOnStatusPlanned);

        plannedStatusCompleet = [filteredArrayOnStatusPlanned lastObject];
            janssenRef = [plannedStatusCompleet substringWithRange:NSMakeRange(0, 8)];
            clientRef = [plannedStatusCompleet substringWithRange:NSMakeRange(9, 15)];
            dateReceived = [plannedStatusCompleet substringWithRange:NSMakeRange(25, 10)];
            tomTomCode = [plannedStatusCompleet substringWithRange:NSMakeRange(36, 9)];
            orderText = [plannedStatusCompleet substringWithRange:NSMakeRange(47, 59)];
            podFileName = [plannedStatusCompleet substringWithRange:NSMakeRange(113, 19)];
            Plannedidentifier = [plannedStatusCompleet substringWithRange:NSMakeRange(62, 1)];
            NSLog(@"Planid:%@",Plannedidentifier);

        NSArray *cutContentPlannedStatus = [NSArray arrayWithObjects:janssenRef,clientRef,dateReceived,tomTomCode,orderText,podFileName,Plannedidentifier,nil];
        [[NSUserDefaults standardUserDefaults] setObject:cutContentPlannedStatus forKey:@"plannedData"];

私はこのように分割しようとしました:

foreach (string s in TrackTraceDataByLine) {
                string[] splitted = s.Split (new char[] { ' ' });
                if (s.Length >= referenceNumber.Length) {
                    if (referenceNumber == splitted [1]) {
                        dataFilteredOnRef.Add (s);
                    }
                }
            }

スペースで分割するのではなく、位置で行う必要があることにすぐに気付くことができます。これは、参照番号のような一部の部分にスペースが含まれている可能性があるためです。

4

1 に答える 1

2

こんな感じですか?

var janssenRef = sourceString.Substring(0, 8);
var clientRef = sourceString.Substring(9, 15);
var dateReceived = sourceString.Substring(25, 10);
...
var array = new string[] { ... };

Linq スタイルでこれを行うには、ジャグ配列を使用できます。

var pos = new int[][] {
    new int[] { 0, 8 }, 
    new int[] { 9, 15 }, 
    new int[] { 25, 10 }, ... };
var array = pos.Select(p => sourceString.Substring(p[0], p[1]))
               .ToArray();

または多次元配列:

var pos = new int[,] { { 0, 8 }, { 9, 15 }, { 25, 10 }, ... };
var array = Enumerable.Range(0, pos.GetLength(0))
                      .Select(i => inputString.Substring(pos[i,0], pos[i,1]))
                      .ToArray();
于 2013-03-28T15:03:17.463 に答える