2012-01-22 9 views
1

私は* .srt字幕ファイルをNSStringに読み込んでいます。この文字列の内容は、次のようになります。空の行でNSArrayをNSArrayに分割してください

1 
00:00:20,000 --> 00:00:24,400 
Altocumulus clouds occur between six thousand 

2 
00:00:24,600 --> 00:00:27,800 
and twenty thousand feet above ground level. 

私はそれぞれの要素がある特定のsubtitle-「フレーム」、例えばに関連した情報が含まれているNSArrayのにこの文字列を分割するエレガントなソリューションを探しています0番目の要素は次のようになります。

1 
00:00:20,000 --> 00:00:24,400 
Altocumulus clouds occur between six thousand 

このタスクをどのようにエレガントに行うには? ..あなたの助けのための

おかげで、私は方法

[string componentsSeparatedByString:@"\n\n"]; 

を使用して、元の文字列を分割しようとしたが、この方法では、空白行を検出することができません!

TOBI

答えて

6

[string componentsSeparatedByString:@"\n\n"]が動作しない場合は、2つの可能性があります。

  1. あなたのファイルが\r\nあるMSDOSスタイルの改行を含んで。だから、@"\r\n\r\n"に分割してみてください。

  2. おそらく空白行にスペースやタブが含まれていると思われます。これはシェルからcat -eを使って確認できます。

+0

"\ r \ n \ r \ n"で分割してください!どうもありがとうございます! –

+0

@ tobias.henn答えがうまくいくときは、その答えを受け入れるのが一般的です。 –

+0

こんにちはリチャード、私はこれを知らなかった!ありがとう! –

4

代わりにNSScannerを使用することをおすすめします。より柔軟性があり、改行がWindowsまたはUnixスタイルであるかどうか、および空白行にスペースが含まれているかどうかを心配する必要はありません。ここに例があります:

NSMutableArray *lines = [NSMutableArray array]; 
NSString *s = @"foo\n\nbar\r\n \t \r\nbaz"; //intentionally mixed line breaks 
NSScanner *scanner = [NSScanner scannerWithString:s]; 
while (![scanner isAtEnd]) { 
    [scanner scanCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:NULL]; 
    NSString *line = nil; 
    [scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&line]; 
    if (line) { 
     [lines addObject:line]; 
    } 
} 
NSLog(@"%@", lines); 
+0

私は今晩NSScannersを調べるつもりです!ありがとう! –

関連する問題