- 论坛徽章:
- 0
|
在网上苦苦寻找没有SCIM的98简码的码表,只发现有海峰的98码表,带词组,对于我一直单字打的我实在不适应
即想写一程序把多余的词去掉,我认为应该用角本语言更适合处理这些,但没有认识学过,用C语言简单设置一下练练手。
源文件来自http://forum.ubuntu.org.cn/viewtopic.php?f=8&t=43634&st=0&sk=t&sd=a&start=0
生成文件:
![]()
文件:wbs98.bin.tar.gz
大小:194KB
下载:
下载
方法如下:
转换思路与步骤:
1. IMEGEN
用它可以逆转换安装目录下的SunWb_98.MB为文本文件SunWb_98.txt。
2. GBEXTSUP
用它可以把得到的unicode格式的文本转换为gb18030格式。
3. 这两个软件如何获得:以上第一个工具可以从windows安装盘中找到,第二个工具微软的网站上有。
4. 写一小段程序,把DOS格式的回车换行变为UNIX格式的换行。即 0d0a -> 0a 也。
5. 再写一段程序,把文字在前、编码在后改为编码在前、文字在后,而且每条编码单独起一行。设此文件名为wb98-0.txt。
6. 转换为UTF-8格式:iconv --from=gb18030 --to-code=utf-8 wb98-0.txt --output=wb98.txt。iconv是debian下的一个字符集转换工具。
6. 找到SCIM放码表的地方:/usr/share/scim/talbes/,假设原来的86版的码表文件为wb86.bin,执行scim-make-table wb86.bin -o wb86.txt,得到逆转换后的五笔86版的码表。
7. 打开wb86.txt,复制文件头、尾并覆盖wb98.txt中相应部分;修改UUID,建议增一即可,以示与86版不同。(输入法名称及所用图片亦可修改。)
8. 执行:scim-make-table wubi98.txt -b -o /usr/share/scim/tables/wb98.bin,重启x-window,完成!
#include stdio.h>
#include string.h>
#includesys/types.h>
#includesys/stat.h>
#includefcntl.h>
#define MAXLINE 1024
int main (int argc, char *argv[])
{
FILE *fp, *fp1;
char buffer[MAXLINE];
char *table_begin = "BEGIN_TABLE\n";
char *table_end = "END_TABLE\n";
if (argc != 3)
{
fprintf(stdout, "usage: %s filein fileout\n", argv[0]);
return 1;
}
if ((fp = fopen(argv[1], "r")) 0)
{
perror("open error");
return 1;
}
if ((fp1 = fopen(argv[2], "w")) 0)
{
perror("open error");
return 1;
}
while (1)
{
if ((fgets(buffer, MAXLINE, fp)) == NULL)
perror("read error");
printf("%s",buffer);
fputs(buffer, fp1);
if (strncmp(buffer, table_begin, strlen(table_begin)) == 0)
break;
}
while (1)
{
if ((fgets(buffer, (int)MAXLINE, fp)) == NULL)
{
perror("read error");
break;
}
else if (strlen(buffer) = 9)
{
printf("%s",buffer);
fputs(buffer,fp1);
}
else if (strncmp(buffer, table_end, strlen(table_end)) == 0)
{
printf("%s",buffer);
fputs(buffer,fp1);
}
else
continue;
}
close(fp);
close(fp1);
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/86649/showart_1667225.html |
|