如何使用Objective C将包含和弦和歌词的txt文件转换为ChordPro格式?

时间:2012-10-16 15:22:26

标签: objective-c nsstring converter

我正在尝试将包含歌词和和弦的txt文件转换为 ChordPro 格式,反之亦然。就这样:

G                   Em
I heard there was a secret chord

G                        Em
that David played and it pleased the Lord

会变成:

[G]I heard there was [Em] a secret chord

[G] that David played and [Em] it pleased the Lord

我目前正在使用NSDictionary个键值(例如键E值[E])并使用此作为从文件转换字符串的基础。我使用的是来自Replace multiple groups of characters in an NSString的自定义方法stringByReplacingStringsFromDictionary

我现在只需要在转换实际包含和弦(而且没有歌词)的行时才需要这样做。例如,我不想将David转换为[D]avid

我认为最好的方法是检查线条是否包含任何未被识别为和弦的内容,如果是这样,请跳过它。但是,如何以这种方式对NSString(或其他集合)测试NSDictionary

2 个答案:

答案 0 :(得分:0)

没有必要为此提供NSDictionary。 您可以使用[NSString stringWithFormat:@"[%@]", chord]创建字符串,其中chord是包含和弦名称的NSString变量。

话虽如此,在这种情况下,字典很小,并没有造成任何伤害,只是用字数填充字典是没用的,我们可以从一个简单的操作中推断出来(在字符串周围添加括号)。

答案 1 :(得分:0)

所以它的单词用空格分隔,如果任何一行包含没有单词或者单词不被识别为和弦那么它就会被单独留下但是你将它们包裹在正方形中括号并将它们的原始位置插入下面的一行?

您将逐字搜索,因此我将已知的和弦放入NSSet。然后,我会查看NSString componentsSeparatedByCharactersInSet:。我使用newlineCharacterSet分割线条而不必沉迷于回车与换行。我使用whitespaceCharacterSet获取每行的单词列表。检查它们,并完成决策逻辑。

然后你可以使用顺序调用rangeOfString:options:range:,在你去的时候修改第三个参数,在你扔掉所有空格之前恢复和弦的角色位置。

如果你不太可能编译一个完整的和弦列表,那么一个聪明的方法可能是将你识别的任何一行标记为一条和弦,比如50%的当你删除空格时,单词作为和弦或任何长度减少的单词。