免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1298 | 回复: 0
打印 上一主题 下一主题

五笔98码变简码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-26 14:10 |只看该作者 |倒序浏览
在网上苦苦寻找没有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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP