2017-06-21 18 views
-6

ブロック単位でファイルを読み込む方法は?

---- BEGIN CERTIFICATE ---- 
dfaskfjdjkjfkdckdjkfjkdfjdlfjdlf 
dfsdkfjdkjfldjfkjdlfjdlkcmdklfkd 
dkfjlkdjfkldjfkljdlfjdlfjdkljkcl 
---- END CERTIFICATE ---- 
---- BEGIN PRIVATE KEY ---- 
ksajfjdfkjjdkfjkdjlfjdkfkdjfkdjf 
dfdkljfkdjkfjdkljfkldjfldjlfkjdl 
---- END PRIVATE KEY ---- 

私が欲しい---- CERTIFCATEをBEGIN ---- ---- END CERTIFICATEの1つのファイルに----部分と別のは---- PRIVATE KEYを開始するために---- - C言語では、別のファイルに---- END PRIVATE KEY --- ..

に、誰も私を助けてください

+3

行を読んでください、開始点であれば行末を見つけだすまで繰り返してください。 –

+0

これはcsplitで簡単にできるでしょう –

答えて

3

は、このロジックは、あなたのために働く必要がありますすることができます。これは@RetiredNinja

FILE *input = fopen("input.txt", "r"); 
if(!input){ 
    //Appropriate error messages 
    return -1; 
} 

char line[100]; //increase this if your line can be bigger 

char filename[100];  
int file = 0; 
sprintf(filename, "output_%d.txt", file++); 
FILE *output = fopen(filename, "w"); 
if(!output){ 
    //Appropriate error messages 
    return -1; 
} 
fgets(line, 100, input); 

char *read = NULL; 

while(1) { 
    read = fgets(line, 100, input); 
    if (read == NULL) 
     break; 
    if (strcmp("---- END PRIVATE KEY ----", line)==0){ 
     fclose(output); 
     sprintf(filename, "output_%d.txt", file++); 
     output = fopen(filename, "w"); 
     if (!output){ 
      //Appropriate error message 
      return -1; 
     } 
     fgets(line, 100, input); 
    }else{ 
     fputs(line, output); 
    } 

} 
fclose(output); 

によってコメントによれば、これは、第二節では、単に最初の終了後に開始されることを前提としています。 セクション間に空白がある場合は、開始行が表示されるまでループする必要があります。

+1

@Stargateur私は、OPがそれらのものをチェックできると仮定しました。答えの中で私はスプリットがどのようにできるかに焦点を当てたいと思っていたので。あなた自身が言ったように、私たちはコード作成サービスではありません。だから、OPはそれらのことを世話する必要があります。 –

+1

私は私の答えで、私はOPを十分に助けてくれたと信じています。とにかく、私は 'fopen'のチェックを追加し、ファイル名について何かを行います。 –

+0

@Stargateurあなたのコメントを削除したのはなぜですか? –

関連する問題