#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_G 200
#define MAX_R 5
#define MAX_LEN 100
int rmaxi,rmaxj,error_flg=0;
struct database{
char *kata[MAX_R];
};
static struct database db[MAX_G],taiou[MAX_G],sort_tmp;
int memory_alloc(void);
int file_load(void);
int taiou_load(void);
void memory_free(void);
void error_msg(char *);
void data_edit(void);
void data_sort(void);
void data_output(void);
void all_hyouji(void)
{
int i,j;
//printf("%d %d\n",rmaxi,rmaxj);
for(i=0;i<rmaxi;i++){
for(j=0;j<rmaxj;j++){
printf("%s,",db[i].kata[j]);
}
printf("\n");
}
}
void main(void)
{
if(memory_alloc()== -1) return;
if(file_load() == -1) return;
if(taiou_load() == -1) return;
data_edit();
data_sort();
if(error_flg==1) return;
//all_hyouji();
data_output();
memory_free();
}
void data_edit(void)
{
int i,j;
char hasi[MAX_LEN+1];
for(i=0;i<rmaxi;i++){
strcpy(hasi ,db[i].kata[0]);
strcpy(db[i].kata[0],db[i].kata[1]);
strcpy(db[i].kata[1],hasi );
strcpy(db[i].kata[2],"no_data");
for(j=0;j<rmaxi;j++){
if(strcmp(db[i].kata[1],taiou[j].kata[0])==0){
strcpy(db[i].kata[2],taiou[j].kata[1]);
}
}
}
}
void data_sort(void)
{
int i,j,s,max;
for(i=0;i<rmaxi-1;i++){
max=atoi(db[i].kata[0]);
s=i;
for(j=i+1;j<rmaxi;j++){
if(atoi(db[j].kata[0])>max){
max=atoi(db[j].kata[0]);
s=j;
}
}
sort_tmp=db[i];
db[i]=db[s];
db[s]=sort_tmp;
}
}
void data_output(void)
{
int i,j,top_num,roop;
top_num=strlen(db[0].kata[0]);
for(i=0;i<rmaxi;i++){
roop=top_num-(int)strlen(db[i].kata[0]);
for(j=0;j<roop;j++) printf(".");
printf("%s ",db[i].kata[0]);
printf("<a href=%s>",db[i].kata[1]);
printf("%s</a><br>",db[i].kata[2]);
printf("\n");
}
}
void error_msg(char *msg)
{
printf("%s\n",msg);
error_flg=1;
}
int file_load(void)
{
FILE *fp;
int i,j,tmp;
char han[1];
if((fp=fopen("data_in.txt","rb"))==NULL){
error_msg("ファイル読込失敗");
return(-1);
}
for(i=0;i<MAX_G;i++){
for(j=0;j<MAX_R;j++){
strcpy(db[i].kata[j],"");
}
}
rmaxj=0;
i=j=0;
while((tmp=fgetc(fp))!=EOF){
if(tmp==0x0d){
;
}
else if(tmp=='\n'){
i++;
j=0;
}
else if(tmp==','){
j++;
}
else if(tmp==' '){
if(strlen(db[i].kata[j])>0) j++;
}
else{
if(i>=MAX_G || j>=MAX_R){
error_msg("収録データ異常(データ数)");
fclose(fp);
return(-1);
}
if(strlen(db[i].kata[j])>=MAX_LEN){
error_msg("収録データ異常(文字数)");
fclose(fp);
return(-1);
}
han[0]=tmp;
strncat(db[i].kata[j],han,1);
if(j>rmaxj) rmaxj=j;
rmaxi=i;
}
}
rmaxi++;
rmaxj++;
fclose(fp);
return(1);
}
int taiou_load(void)
{
FILE *fp;
int i,j,tmp;
char han[1];
if((fp=fopen("taiou.csv","rb"))==NULL){
error_msg("ファイル読込失敗");
return(-1);
}
for(i=0;i<MAX_G;i++){
for(j=0;j<MAX_R;j++){
strcpy(taiou[i].kata[j],"");
}
}
i=j=0;
while((tmp=fgetc(fp))!=EOF){
if(tmp==0x0d){
;
}
else if(tmp=='\n'){
i++;
j=0;
}
else if(tmp==','){
j++;
}
else{
if(i>=MAX_G || j>=MAX_R){
error_msg("収録データ異常(データ数)");
fclose(fp);
return(-1);
}
if(strlen(taiou[i].kata[j])>=MAX_LEN){
error_msg("収録データ異常(文字数)");
fclose(fp);
return(-1);
}
han[0]=tmp;
strncat(taiou[i].kata[j],han,1);
}
}
fclose(fp);
return(1);
}
int memory_alloc(void)
{
int i,j;
for(i=0;i<MAX_G;i++){
for(j=0;j<MAX_R;j++){
db[i].kata[j]=(char *)malloc(sizeof(char)*(MAX_LEN+1));
if(db[i].kata[j]==NULL){
error_msg("メモリ確保失敗");
return(-1);
}
}
}
for(i=0;i<MAX_G;i++){
for(j=0;j<MAX_R;j++){
taiou[i].kata[j]=(char *)malloc(sizeof(char)*(MAX_LEN+1));
if(taiou[i].kata[j]==NULL){
error_msg("メモリ確保失敗");
return(-1);
}
}
}
return(1);
}
void memory_free(void)
{
int i,j;
for(i=0;i<MAX_G;i++){
for(j=0;j<MAX_R;j++){
free(db[i].kata[j]);
free(taiou[i].kata[j]);
}
}
}