2012-04-03 12 views
0

すべての文字列の長さがnである配列を使用するのが目的です。plistから読み込みますが、特定の文字列のみを受け入れます。

私がしているコードは、plist(これはちょうど250,000文字列)を配列に読み込んだ後、長さがnでないものを見つけるために配列を繰り返します。もちろん、効率を上げるために、私はSTRING BY STRINGから読み込むことができる方が好きです。私が読んでいるように、配列に挿入する前に長さを入れておいてもよいでしょう。私はちょうど客観的な - Cを学ぶために始めているが、解決のためにGoogleの周りに苦労していた= P

編集:まあ私はちょうどGoogleにplistではなく、私は自分自身をこれを理解することができるかもしれません。

+1

あなたが自己を見つけたなら、それは良いことです。解決策を回答として投稿したり、他の回答を受け入れることができます。 –

+0

ドキュメントを読んだ後の現在の前提は、特に解析する方法がないということです。基本的にはファイル全体を読み込み、そこから処理します(Cの中で行ごとに読み込むことはできません)。さまざまなfget)。したがってNeverBeが提案するメソッドは私には十分に良いように見えます。私が読んだときに長さを保管しているので、もう2回繰り返す必要はありません。私のオリジナルの反復ループを超えたアップグレード – Paul

答えて

3

plistをツリー(NSMutableDictionary)に解析できます。 Dictには文字列長の名前のキーがあります。あなたが必要な文字列の長さは、AppleがインクリメンタルPLISTを解析するためのAPIを提供していません

NSArray *string4Lenght = [result objectForKey:@"4"]; 
+0

これは非常にスマートな解決策です。ありがとう=] – Paul

1

でアレイにアクセスすることができますよりも、たとえば

NSMutableDictionary *result = [NSMutableDictionary dictionary]; 

for (NSString *str in [plistDict allObjects]) { 

    NSString *key = [NSString stringWithFormat:@"%d", [str length]]; 

    NSMutableArray *array = [result objectForKey:key]; 
    if (!array) { 
     array = [NSMutableArray array]; 
    } 
    [array addObject:str]; 
    [result setObject:array forKey:key]; 
} 

ため

plistをXML形式で保存する場合は、NSXMLParserを使用して解析することができます。スキーマは非常に単純で、Property List Programming Guideに幾分記述されています。

バイナリ形式を段階的に解析するには、さらに多くの作業を行う必要があります。形式の公式文書はありません。フォーマットを読み書きするためのAppleのソースコードはオープンソース(CFBinaryPList.c)であり、実際のコードとともに有用なコメントがあります。

これを徐々に行う必要がある場合は、XMLルートに進んでください。そうであれば、NSInputStreamをサブクラス化して、gzipまたはbzip2ファイルから読み込み、その場で解凍することができます。

関連する問題