// CSVファイルに"を入れるためのエンコード、デコード処理 // ルール CSVファイルに保存する場合、"は\"に、\は\\に変換して保存する // 読み込む場合は、逆に変換して元の値に戻す // やること 文字列変換関数を作って、変換するだけ。。。。 #include #include #include // 文字列置換関数 // パラメータ 1.対象文字列 2.変換結果格納バッファ 3.変換前文字列 4.変換後文字列 void chikan(const char *target, char *result, const char *before, const char *after) { char *p; int i = 0, size; int beforeSize = strlen(before); // 変換後の格納バッファを空っぽにする result[0] = '\0'; // 検索結果がなくなるまでループを回す while (NULL != (p = strstr(&target[i], before))) { // 検索結果と処理済みカウンタからコピーする文字数を決める size = p - &target[i]; // 検索結果の手前まで文字列をコピー strncat(result, &target[i], size); // 変換後文字列を追加する strcat(result, after); // カウンタにコピーした文字数と変換前文字列の文字数を追加する i = i + beforeSize + size; } // 検索結果の残りをresultに全部足す strcat(result, &target[i]); } int main(void) { // "と\を\"と\\にエンコード・デコードします char *target = "\",\"\\ \\\\"; char r1[200], r2[200], r3[200], r4[200]; char *before, *after; // エンコード printf("エンコード処理\n"); // まず\を\\に変換します printf(" エンコード前の値 %s\n", target); before = "\\"; after = "\\\\"; chikan(target, r1, before, after); printf(" エンコード中の値 %s\n", r1); before = "\""; after = "\\\""; chikan(r1, r2, before, after); printf(" エンコード後の値 %s\n", r2); printf("デコード処理\n"); printf(" デコード前の値 %s\n", r2); // デコード // \\を\に戻す before = "\\\\"; after = "\\"; chikan(r2, r3, before, after); printf(" デコード中の値 %s\n", r3); // \"を"に戻す before = "\\\""; after = "\""; chikan(r3, r4, before, after); printf(" デコード後の値 %s\n", r4); return EXIT_SUCCESS; }