SAS中文论坛
标题:
如何把全角转换为半角字符
[打印本页]
作者:
shiyiming
时间:
2007-11-6 10:43
标题:
如何把全角转换为半角字符
高手有问题请教,
有几万条记录在手里,某个字段string里面有全角的字符(某些又没有),比如:
上海市遵义路100号虹桥上海城 B栋805-10室
PARK HEUNG RYUL
有什么方法转换成正常的字符,比如PARK HEUNG RYUL.
多谢了。
作者:
shiyiming
时间:
2007-11-6 14:28
标题:
Re: 如何把全角转换为半角字符
我个人认为应该是没有现成的SAS函数支持全角字符与半角字符的方便转换,但是Java在这方面就强多了,是否可以考虑采用Java代码帮忙。
步骤1:编写Java代码Change.java实现全角与半角的转换;用javac命令编译成class文件,放在任意目录下,如C:\Change.class。
[code:3trzh66w]public class Change {
public String DBCString;
public String SBCString;
public String getDBCString() {
return DBCString;
}
public void setDBCString(String string) {
DBCString = string;
}
public Change(String inStr) {
this.setSBCString(this.ToSBC(inStr));
this.setDBCString(this.ToDBC(inStr));
}
public String getSBCString() {
return SBCString;
}
public void setSBCString(String string) {
SBCString = string;
}
public static String ToSBC(String input) {
// 半角转全角
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 32) {
c[i] = (char) 12288;
continue;
}
if (c[i] < 127)
c[i] = (char) (c[i] + 65248);
}
return new String(c);
}
public static String ToDBC(String input) {
// 全角转半角
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 12288) {
c[i] = (char) 32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
}[/code:3trzh66w]
步骤2:修改SAS安装目录下的SASV9.cfg文件,根据class文件的物理路径修改或增加-Dsas.app.class.path=C:\。
[quote:3trzh66w]/* Options used when SAS is accessing a JVM for JNI processing */
-JREOPTIONS=(-Dsas.jre.home=...... -Dsas.app.class.path=C:\)
[/quote:3trzh66w]
步骤3:编写SAS代码调用Java程序。
[code:3trzh66w]data test;
length DBC $200;
length SBC $200;
declare javaobj j ('Change', '上海市s遵 义路100号虹 桥上海t1城 B栋805-10室 PARK HEUNG RYUL');
j.callStringMethod ('getDBCString', DBC);
j.callStringMethod ('getSBCString', SBC);
j.delete();
run;[/code:3trzh66w]
以上方法我已经是完全实现做通了,其它思路:
1、用macro和tranwrd函数实现,如tranwrd('PARK', 'P', 'P')。
2、全角空格为12288,半角空格为32;其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248。用SAS中的byte函数实现。
其他方法我还没有尝试过,有兴趣的朋友可以尝试一下,大家再来一起探讨。
欢迎光临 SAS中文论坛 (https://mysas.net/forum/)
Powered by Discuz! X3.2