解説
- CSVファイルに"を入れるためのエンコード、デコード処理のサンプルです。
ルール
- CSVファイルに保存する場合、"は\"に、\は\\に変換して保存する
- 読み込む場合は、逆に変換して元の値に戻す
やること
// CSVファイルに"を入れるためのエンコード、デコード処理
// ルール CSVファイルに保存する場合、"は\"に、\は\\に変換して保存する
// 読み込む場合は、逆に変換して元の値に戻す
// やること 文字列変換関数を作って、変換するだけ。。。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 文字列置換関数
// パラメータ 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;
}
実行結果
エンコード処理
エンコード前の値 ","\ \\
エンコード中の値 ","\\ \\\\
エンコード後の値 \",\"\\ \\\\
デコード処理
デコード前の値 \",\"\\ \\\\
デコード中の値 \",\"\ \\
デコード後の値 ","\ \\
ideone ソースとかここからコピペできるかも
最終更新:2012年09月23日 22:38