【发布时间】:2020-07-28 05:26:05
【问题描述】:
我在 stackoverflow 上找到了一些用于解析 .srt 文件的好代码(使用 Objective C 解析 SRT 文件),如下所示:
NSScanner *scanner = [NSScanner scannerWithString:[theTextView string]];
while (![scanner isAtEnd])
{
@autoreleasepool
{
NSString *indexString;
(void) [scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&indexString];
NSString *startString;
(void) [scanner scanUpToString:@" --> " intoString:&startString];
(void) [scanner scanString:@"-->" intoString:NULL];
NSString *endString;
(void) [scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&endString];
NSString *textString;
(void) [scanner scanUpToString:@"\r\n\r\n" intoString:&textString];
textString = [textString stringByReplacingOccurrencesOfString:@"\r\n" withString:@" "];
textString = [textString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
indexString, @"index",
startString, @"start",
endString , @"end",
textString , @"text",
nil];
NSLog(@"%@", dictionary);
}
}
我有一些来自电视剧的 .srt 文件,其中包含很多“信用”子内容,这有点破坏体验并将它们编码出来,给我留下了像这样的 非顺序 索引:
// deleted subtitles
3
00:00:11,070 --> 00:00:14,466
Screenwriter: Name here...
4
00:00:14,633 --> 00:00:17,466
Music: Name here...
5
00:00:17,686 --> 00:00:20,680
Narrator: Name here...
// deleted subtitle
7
00:01:17,966 --> 00:01:21,966
Episode 12
当我尝试导入文件时,它会阻塞 FCPX。我对 NSScanner 完全陌生,我尝试了所有我能想到的方法,但都没有成功。我将不胜感激修改上述内容以跳过子索引行总共(如果可能的话?)。我可以使用单独的代码按顺序将它们添加回来。谢谢!
更新: 感谢您通过 'while' 循环 skaak 进行索引的建议,但问题似乎仍然违反逻辑,因为它永远不会超过第一遍(!!)。日志如下所示 - 首先使用 NSDictionary 然后附加到 NSMutableString (可能对我的目的更有用)。请注意,在这两种情况下,第一个 sub 都更改为 1,但索引 4、5、7 保持不变,而不是重新编号为 2、3、4。
2020-07-29 18:35:26.267 SRT Editor[12494:903]
{
end = "00:00:14,466";
index = 1;
start = "00:00:11,070";
text = "Screenwriter: Hashida Sugako\n\n4 00:00:14,633 --> 00:00:17,466 Music: Sakada Koichi\n\n5 00:00:17,686 --> 00:00:20,680 Narrator: Naraoka Tomoko\n\n7 00:01:28,633 --> 00:01:34,233 It was early spring in 1958...
}
2020-07-29 18:51:15.612 SRT Editor[12646:903]
1
00:00:11,07000:00:14,466Screenwriter: Hashida Sugako
4 00:00:14,633 --> 00:00:17,466 Music: Sakada Koichi
5 00:00:17,686 --> 00:00:20,680 Narrator: Naraoka Tomoko
7 00:01:28,633 --> 00:01:34,233 It was early spring in 1958...
另一个令人费解的观察是,如果我放入一个 loopCounter++,它还表明“while”循环只通过一次,这让我感到困惑,尽管我确实提到不熟悉 NSScanner。
【问题讨论】:
-
你真的不需要索引,如果它们是排序的,你可以将它们添加到一个数组中,数组的索引将是对象的索引(+1,因为我猜它不需要'不是从 0 开始)
-
你打算如何使用字典?
-
你好威勒克。它包含在代码示例中),如上图所示),但在我的情况下,我倾向于只写一个 NSMutableString。
标签: objective-c macos srt