Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1035277
  • 博文数量: 243
  • 博客积分: 3053
  • 博客等级: 中校
  • 技术积分: 2975
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-02 21:11
文章分类

全部博文(243)

文章存档

2013年(2)

2012年(20)

2011年(5)

2010年(114)

2009年(102)

我的朋友

分类: Python/Ruby

2012-03-26 16:38:51

在我们做项目的时候,经常会将XML转换成TEXT文件,或将TEXT文件转换成XML格式
Linguist可以帮助我们来进行转换,下面简单介绍一下Linguist的用法
 
一,用于TEXT格式转换成XML格式
Linguist 由行和字段组成,行对应着XML的复合元素,字段对应着XML的简单元素,
各行之间通过Line Delimiter的分隔符进行分割,默认是回车换行,各字段的拆分方法有以下2种,
1,通过指定Separation Value来指定字段分隔符来进行拆分
2,通过指定各个字段对应的位置和长度来进行拆分,注意如果实际的长度小于定义的长度的话,是不会进行分割的。
为了可以循环生成某些详细部的行,可以将行的某个字段标识成ID,由Linguist的ID Position指定
标识字段(一般是用第一个字段),然后在行的Identifier中指定标识内容,这样具有同样标识内容的行可以循环显示。
例如 有以下的Text文件
     Head  this is Head
     Detail  this is Detail1
     Detail  this is Detail2
     Detail  this is Detail3
     Foot  this is Foot
 
按照如上的设置,指定字段分割符为TAB(ASC(9)),ID Position=1, 各个行的Identifier分别设定为Head, Detail, Foot, 就可以生成如下的XML文件
Head
this is Head
Detail
this is Detail1
Detail
this is Detail1
Detail
this is Detail1
Foot
this is Foot
 
在由TEXT转换成XML时,如果指定位置和长度进行字段分割的时候,由于Linguist是按照字符个数进行分割的,但我们在写程序的时候如果是按照字节进行分割的话,就可能造成不能正确分割,这时候就只能
在Lingquist里将多个字段合成一个字段,读入该字段,然后手动分割该字段,如通过如下的方法:
SELECT
CONVERT(varchar(500), SUBSTRING(CONVERT(TEXT, A.LineData COLLATE_Japanese_CS_AS_KS_WS),1,5)) as ID,
CONVERT(varchar(500), SUBSTRING(CONVERT(TEXT, A.LineData COLLATE_Japanese_CS_AS_KS_WS),6,10)) as Name
from
(select 'AAAAAAAAAAAAAAAAAAAA' as LineData) A
 
 
二,用于XML格式转换成TEXT格式
如上所述,如果指定字段的位置和长度,Linguist会按照指定的长度进行转换,如果该字段的实际值的长度小于指定的长度时,Linguist会按照指定的长度进行在左边或右边进行补足对应的值,补足值也可以进行指定,但是,由于Linguist是按照字符个数进行补足的,但我们在写程序的时候如果是按照字节进行补的话,就可能造成不能正确补足值,这时候就只能在手动不足各字段,如通过如下的方法补空格:
space(25-DATALENGTH(CONVERT(Varchar(500), ISNULL(LastUpdateBy COLLATE Japanese_CS_AS_KS_WS, N' ')))) AS ADDCONST
 
 
阅读(1554) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~