0

文字Cで始まり、Mで始まる 1 000 000 行を超えるファイル テキストがあります 。 例:

C9203007870000000000000006339912610971240095400111200469300000 16122011AMI  00000100010000315       080  
C9203007870000000000000006339912610971240095400111200469300000 09122011B    590001000100000270016092100  
M920300787000000000000000633991261097124009540011120046930000031122011JVJF004       10     N
M920300787000000000000000633991261097124009540011120046930000009122011DEQP003       10     N                                
M920300787000000000000000633991261097124009540011120046930000012122011ACQK001       10Z    N
C9203007870000000000000006339912610971240095400111200469300000 24122011AMI  00000100010000315       080
C9203007870000000000000006339912610971240095400111200469300000 24122011AMI  00000100010000315       080

文字Mで始まる行だけを配列に入れたい 分割に追加する方法: var pattern:RegExp = /^M/;

var mFileReference:FileReference;
var mArray:Array = new Array();

function onFileLoaded(event:Event):void
{
    mFileReference = event.target as FileReference;
    data = mFileReference["data"];
    mArray = (data.toString()).split("\n");
}

多くの時間とリソースを必要とする「for」ループを通過したくありません。/^M/ を分割に追加したいのですが、それは可能ですか?

for each (var s:String in mArray) 
{
        if (pattern.test(s)) {
            values.push(s);
        }
}

みんなありがとう。

4

1 に答える 1

3

次の正規表現を試してください。

/^M.*/gm

これは、M で始まるすべての行と一致する必要があります。

フラグを使用しgて文字列内の式のすべてのケースに一致しm、複数行モードに使用するため^、文字列$の先頭/末尾ではなく、行の先頭/末尾に一致します。

次のように配列を取得できます。

mArray = data.toString().match(/^M.*/gm);
于 2012-12-24T18:46:35.260 に答える