付録
J科の人間として,簡単なプログラミングで上の単語リストを作っています。(授業に合わせてC言語ですがこんなのC#とかなら簡単にできるわ!ってとこも。)
以下,コードです。
#include <stdio.h>
#include <stdlib.h>
// 与えられた文字列中から改行コードを取り去る関数
void removeLF(char str[])
{
int i=0;
while (str[i]) {// '¥0'=0に相当
if (str[i]=='\n' || str[i]=='\r') str[i]='\0';
i++;
}
}
int main(){
FILE *fin;
char str[256];
char IN_name[256];
printf("入力ファイル名>");
gets(IN_name);
fin = fopen(IN_name, "r");
if(fin == NULL){
printf("ERROR!!!\n");
exit(0);
}
while(fgets(str, 256, fin) != NULL){
removeLF(str);
printf("<details>\n\t<summary>%s</summary>\n\t<span class=\"answer\">", str);
fgets(str, 256, fin);
removeLF(str);
printf("%s</span>\n</details>\n", str);
}
return 0;
}
↑のコード,わかる人にはわかりますが,「<」や「>」などを含んでいますが,
これをそのままhtmlに張り付けるとエラーを起こします。
「<」なら,「<」,「>」なら,「>」と書かないといけないのです。
そのため,コードをhtml用に直すプログラムが必要になったので,そちらも作りました。
要するに,語彙一覧を作るツールのコードを公開するためのコードを書いたってことです。
以下がコードです。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 与えられた文字列strとn文字目より,文字列transを置き換える
void transStr(char str[], int *n, char trans[])
{
int count_trans, count_str, i;
char tmp;
// strの長さ
count_str = strlen(str);
// 置き換える文字列の長さ
count_trans = strlen(trans);
// n文字目以降,置き換える文字列の長さ分だけ右にシフト
i = count_str + (count_trans -1);// 終点を求める
str[i] = '\0';
for(i-- ; i >= (*n)+count_trans; i--){
str[i] = str[i-(count_trans-1)];
}
// 空いたところに置き換える文字列を配置
for(i = 0; i < count_trans; i++){
str[(*n)+i] = trans[i];
}
(*n)+= count_trans -1;
}
int main(){
FILE *fin;
char str[1024][1024] = {0};
char tmp[1024];
char IN_name[256];
int i, j, length;
printf("入力ファイル名>");
gets(IN_name);
fin = fopen(IN_name, "r");
if(fin == NULL){
printf("ERROR!!!\n");
exit(0);
}
i = length = 0;
while(fgets(tmp, 1024, fin) != NULL){
strcpy(str[i], tmp);
i++;
length++;
}
// &を変換("<"とかの&が混入する前に)
i=0;
while(i < length){
j = 0;
while(str[i][j] != '\0'){
if(str[i][j] == '&'){
transStr(str[i], &j, "&");
}
j++;
}
i++;
}
// <, >, ", (TAB), (SPACE)を変換
i=0;
while(i < length){
j = 0;
while(str[i][j] != '\0'){
// ifの実行後,位置が変わるので最初に戻す
if(str[i][j] == '<'){
transStr(str[i], &j, "<");
}
else if(str[i][j] == '>'){
transStr(str[i], &j, ">");
}
else if(str[i][j] == '"'){
transStr(str[i], &j, """);
}
else if(str[i][j] == '\t'){
transStr(str[i], &j, "	");
}
else if(str[i][j] == ' '){
transStr(str[i], &j, " ");
}
j++;
}
i++;
}
// <と>が含まれる<br>を処理,プリント
i = 0;
while(i < length){
j = 0;
while(str[i][j] != '\0'){
// txt上における,改行以降は何もないので戻す必要ない
if(str[i][j] == '\n'){
transStr(str[i], &j, "<br>");
}
j++;
}
puts(str[i]);
i++;
}
fclose(fin);
return 0;
}