分享

再次求教ASP将大量的文本数据导入到数据库中问题 - Web 开发

 johnlane 2007-06-13

主题:再次求教ASP将大量的文本数据导入到数据库中问题

各位大侠:      
  本人正在用ASP开发一个项目,需要将大量的文本数据导入到sql   server   2000数据库中,数据内容如下:      
  600204040003天池有限公司百货大楼                         60020201290225003755       2860           123,456.96      
  600204040003青岛百货大楼                                         60020201290225003755       2860             39,785.96      
  600204040003上海中天百货大楼                                 60020201290225003755       2860               1,000.96      
  数据之间没有分隔符,也就是所谓的定长数据,数据结构如下:      
  1、编号   12字节   左对齐      
  2、名称   32字节   左对齐      
  3、账号   20字节   左对齐      
  4、代码   7字节   右对齐      
  5、金额   15字节   右对齐      
  以上只是一种文本的结构,其他20多种文本与此的结构类似,只是数据项更多一些。      
  每种文本大约有几百行至几千行,有几种上万行。      
  请问:      
  1、我已经用c++写了一部分文本的导入工具,但是我还是想用asp来做导入工作,请问如何实现?      
  2、我不想使用sql   server的数据导入导出工具,因为对业务人员来说,每次都要决定数据的起始位置太困难,而且金额中有千分符,导入一般都不会成功。    
  3、我准备用fso来读取文本文件,流程如下:    
  读一行    
  用mid()和midb()来取得每个数据项    
  写入数据库    
  读下一行    
  但是始终不能按照“西文一个字节,中文两个字节”这一方式得到我想要的数据项,请问需要做什么字符属性的设置吗?      
  4、金额中的千分符如何处理?      
  谢谢各位,请不吝赐教。  
  文本是所谓的定长数据,各个数据项之间没有分隔符。请您将数据放在记事本里看,不要折行。  
  问题点数:50、回复次数:51

回复:再次求教ASP将大量的文本数据导入到数据库中问题1

建议你用powerbuiler的数据库工具,它能够将整理好的文本直接导入数据库。

回复:再次求教ASP将大量的文本数据导入到数据库中问题2

不行呀,每天都要导入这些数据,我不想自己做,我要让业务人员来做。所以,我一定要用asp来实现,关键是mid()的用法有问题,与c++里的strcopy在中英文的处理上不一样。  
  我原来以为这是一个很简单的问题,现在看来并不简单。  
  难道这里也没有高手吗?

回复:再次求教ASP将大量的文本数据导入到数据库中问题3

有没有人会使用msdn.net?

回复:再次求教ASP将大量的文本数据导入到数据库中问题4

http://expert.csdn.net/Expert/topic/2415/2415802.xml?temp=.129574  
  可能是这个意思!对你或许有帮助

回复:再次求教ASP将大量的文本数据导入到数据库中问题5

你的格式里面,不足字节用什么来填充?空格吗?

回复:再次求教ASP将大量的文本数据导入到数据库中问题6

谢谢gaoqianjin(残荷),您提供的这篇文章所使用的方法我会,那里面每个数据项之间是以空格来分割的,而我的数据是定长数据,各个数据项之间没有分隔符。请您将数据放在记事本里看,不要折行。

回复:再次求教ASP将大量的文本数据导入到数据库中问题7

谢谢alexzhang00(三角猫(sjcatsoft))   ,而我的数据是定长数据,各个数据项之间没有分隔符。请您将数据放在记事本里看,不要折行。不足字节用空格来填充。例如:  
  12345abcde           中国天山           abcdef           12.25  
  78901rerwe           中国西双版纳   erwerr     1,234.56

回复:再次求教ASP将大量的文本数据导入到数据库中问题8

我在msdn找到下面的例子,开始时我很激动,以为我的问题可以解决了,但是后来发现,这个例子里面使用的StrConv函数不是一个vbscript函数,而是是个vba函数,所以我的问题依然没有解决。希望得到专家的指点。  
  Mid   Function   Example  
  The   first   example   uses   the   Mid   function   to   return   a   specified   number   of   characters   from   a   string.  
   
  Dim   MyString,   FirstWord,   LastWord,   MidWords  
  MyString   =   "Mid   Function   Demo"       ‘   Create   text   string.  
  FirstWord   =   Mid(MyString,   1,   3)       ‘   Returns   "Mid".  
  LastWord   =   Mid(MyString,   14,   4)       ‘   Returns   "Demo".  
  MidWords   =   Mid(MyString,   5)       ‘   Returns   "Function   Demo".  
   
  The   second   example   use   MidB   and   a   user-defined   function   (MidMbcs)   to   also   return   characters   from   string.   The   difference   here   is   that   the   input   string   is   ANSI   and   the   length   is   in   bytes.  
   
  Function   MidMbcs(ByVal   str   as   String,   start,   length)  
        MidMbcs   =   StrConv(MidB(StrConv(str,   vbFromUnicode),   start,   length),   vbUnicode)  
  End   Function  
   
  Dim   MyString  
  MyString   =   "AbCdEfG"  
  ‘   Where   "A",   "C",   "E",   and   "G"   are   DBCS   and   "b",   "d",    
  ‘   and   "f"   are   SBCS.  
  MyNewString   =   Mid(MyString,   3,   4)  
  ‘   Returns   ""CdEf"  
  MyNewString   =   MidB(MyString,   3,   4)  
  ‘   Returns   ""bC"  
  MyNewString   =   MidMbcs(MyString,   3,   4)  
  ‘   Returns   "bCd"  
 

回复:再次求教ASP将大量的文本数据导入到数据库中问题9

我只想到用空格来区分   的!顶!

回复:再次求教ASP将大量的文本数据导入到数据库中问题10

用excel试试

回复:再次求教ASP将大量的文本数据导入到数据库中问题11

谢谢cnmaya(allen)   ,因为每天都有许多这样的文件需要导入,所以我一定要用一种很方便的方法来实现,所以我一定要用asp来做。

回复:再次求教ASP将大量的文本数据导入到数据库中问题12

问题比较简单了  
   
  <%  
  Dim   fso,   txtFile,   ID,   name,   account,   code,   amount,   tmpLine  
   
  Set   fso   =   Server.CreateObject("Scripting.FileSystemObject")  
  Set   txtFile   =   fso.OpenTextFile("你的文件绝对路径")  
  While   not   txtFile.AtEndofStream  
              tmpLine   =   txtFile.ReadLine  
              ID   =   Trim(Left(tmpLine,12))  
              name   =   Trim(Mid(tmpLine,13,32))  
              account   =   Trim(Mid(tmpLine,45,20))  
              code   =   Trim(Mid(tmpLine,65,7))  
              amount   =   Trim(Right(tmpLine,15))  
              Response.write   "ID="   &   ID  
              response.write   "<br>"  
              response.write   "name="   &   name  
              response.write   "<br>"  
              response.write   "account="   &   account  
              response.write   "<br>"  
              response.write   "code="   &   code  
              response.write   "<br>"  
              response.write   "amount="   &   amount  
              response.write   "-------------------------------------"  
  wend  
  set   txtFile   =   nothing  
  set   fso   =   nothing  
  %>

回复:再次求教ASP将大量的文本数据导入到数据库中问题13

up

回复:再次求教ASP将大量的文本数据导入到数据库中问题14

是的,像这种情况,我以前用Excel处理后,再用DTS导入sql   server库中

回复:再次求教ASP将大量的文本数据导入到数据库中问题15

非常感谢alexzhang00(三角猫(sjcatsoft))再次回复本帖,但是问题不是您想像的那么简单,如果文本数据都是单字节的字符,那么您的程序确实可以解决这个问题,可是实际情况是里面包含有双字节数据,而且不够长度的部分用单字节空格来补全了,所以问题复杂了。您的程序一定没有实际运行过,您只要将我提供的文本数据用您的程序处理一下,您就会发现问题的所在。再次感谢您的回复。

回复:再次求教ASP将大量的文本数据导入到数据库中问题16

请问如何让本帖能出现在论坛的前列,好让更多的人看到。

回复:再次求教ASP将大量的文本数据导入到数据库中问题17

谢谢wsqsoft(Qing)参与,但是我们是程序员,我们写的程序是让别人来用的,而且使用者往往对计算机或者某些工具并不熟悉,我们不能要求他们按照我们设定的方法去工作,尤其是要他们去判断应该在哪里拆分数据,如果数据导入错了,我们是要承担相应的责任的。其实我用c++已经写了一些导入程序,只是觉得这样做有一点麻烦,而且集成度不高。所以很想用asp来实现,也就发现了我现在遇到的这个问题,现在我觉得这个问题越来越有意思了,我一定要找到问题的答案。

回复:再次求教ASP将大量的文本数据导入到数据库中问题18

帮你顶一下!

回复:再次求教ASP将大量的文本数据导入到数据库中问题19

不好意思,顺便问一句,如何定义一个文本文件的数据结构,(这应该不是数据库表的结构吧?):  
  如您所定义的数据结构如下:      
  1、编号   12字节   左对齐      
  2、名称   32字节   左对齐      
  3、账号   20字节   左对齐      
  4、代码   7字节   右对齐      
  5、金额   15字节   右对齐      
   
   
   
   
 

回复:再次求教ASP将大量的文本数据导入到数据库中问题20

关注……

回复:再次求教ASP将大量的文本数据导入到数据库中问题21

回复gaoqianjin(残荷),您理解错了,我没有定义文本的数据结构,我的文本数据就是这样的,我只是对文本的结构进行了描述而已。

回复:再次求教ASP将大量的文本数据导入到数据库中问题22

谢谢所有关注这个问题的专家和朋友。

回复:再次求教ASP将大量的文本数据导入到数据库中问题23

我觉得如果字段都定长的话,就可以直接使用mid   分析每行的数据,如果不定长但是有空格的话也可以使用   instr   实现读取位置,最后分析文件使用:fso

回复:再次求教ASP将大量的文本数据导入到数据库中问题24

回复xieyj(Free   Fish),您只有试一下才知道行不行,明天我帖一个测试程序,请大家测试。

回复:再次求教ASP将大量的文本数据导入到数据库中问题25

等待中……

回复:再次求教ASP将大量的文本数据导入到数据库中问题26

等待中......  
  请教问题,将文本文件作为后台数据库,用ASP读入网页,如何实现。文本中用|为分格符

回复:再次求教ASP将大量的文本数据导入到数据库中问题27

顶!

回复:再次求教ASP将大量的文本数据导入到数据库中问题28

<%   dim   fso,txtfile,ziduan  
  set   fso=server.createobject("scripting.filesystemobject")  
  set   txtfile=fso.opentextfiel("文本绝对路径")  
  while   not   txtfile.atendofstream  
  tmpline   =   txtfile.readline  
  ziduan=split(tmplind,"|")  
  for   i   =0   to   ubound(ziduan)  
  response.write   ziduan(i)  
  next  
  wend  
  set   txtfile=   nothing  
  set   fso   =   nothing  
  %>                                             执行完毕无任何结果输出   ,请改错,谢谢

回复:再次求教ASP将大量的文本数据导入到数据库中问题29

这是一个测试程序,用于说明我的问题,欢迎大家测试。  
  <HTML>  
  <HEAD>  
  <META   NAME="GENERATOR"   Content="Microsoft   FrontPage   4.0">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  </HEAD>  
  <body   bgcolor="#99bbc3">  
  <P>  
  <%  
  Dim   strOutput    
  strOutput1="1234567890abcdefg中国公司                         abcdef             139,123.45"  
  strOutput2="1234567890abcdefg中国                                 abcdef             139,123.45"  
  Response.Write   "第一行数据"   &   "<br>"  
  str1=mid(strOutput1,1,10)  
  str2=mid(strOutput1,11,7)  
  str3=mid(strOutput1,18,20)  
  str4=mid(strOutput1,38,6)  
  str5=mid(strOutput1,44,16)  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
   
  Response.Write   "第二行数据"   &   "<br>"  
  str1=mid(strOutput2,1,10)  
  str2=mid(strOutput2,11,7)  
  str3=mid(strOutput2,18,20)  
  str4=mid(strOutput2,38,6)  
  str5=mid(strOutput2,44,16)  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
   
  %>  
   
   
  </body>  
  </html>  
   
  下面是程序的输出结果  
  第一行数据  
  1234567890  
  abcdefg  
  中国公司   abcd  
  ef    
  139,123.45  
  第二行数据  
  1234567890  
  abcdefg  
  中国   ab  
  cdef    
  139,123.45  
   
  这个结果不是我想要,我要的结果是  
  1234567890  
  abcdefg  
  中国公司                          
  abcdef  
              139,123.45  
  1234567890  
  abcdefg  
  中国                                  
  abcdef  
              139,123.45  
  看看谁可以解决这个问题。

回复:再次求教ASP将大量的文本数据导入到数据库中问题30

看看下边的代码能帮你吗  
  <HTML>  
  <HEAD>  
  <META   NAME="GENERATOR"   Content="Microsoft   FrontPage   4.0">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  </HEAD>  
  <body   bgcolor="#99bbc3">  
  <P>  
  <%  
  Dim   strOutput    
  strOutput1="1234567890abcdefg中国公司                         abcdef             139,123.45"  
  strOutput2="1234567890abcdefg中国                                 abcdef             139,123.45"  
  Response.Write   "第一行数据"   &   "<br/>"  
  str1=mid(strOutput1,1,10)  
  str2=mid(strOutput1,11,7)  
  str3=trim(mid(strOutput1,18,16))  
  str4=trim(mid(strOutput1,34,8))  
  str5=trim(mid(strOutput1,44,16))  
   
  Response.Write   str1   &   "<br/>"  
  Response.Write   str2   &   "<br/>"  
  Response.Write   str3   &   "<br/>"  
  Response.Write   str4   &   "<br/>"  
  for   i   =0   to   len(str4)  
  response.write("&nbsp")  
  next  
  Response.Write   str5   &   "<br/>"  
   
  Response.Write   "第二行数据"   &   "<br/>"  
  str1=mid(strOutput2,1,10)  
  str2=mid(strOutput2,11,7)  
  str3=trim(mid(strOutput2,18,16))  
  str4=trim(mid(strOutput2,34,8))  
  str5=trim(mid(strOutput2,44,16))  
   
  Response.Write   str1   &   "<br/>"  
  Response.Write   str2   &   "<br/>"  
  Response.Write   str3   &   "<br/>"  
  Response.Write   str4   &   "<br/>"  
  for   i   =0   to   len(str4)  
  response.write("&nbsp")  
  next  
  Response.Write   str5   &   "<br/>"  
   
  %>  
   
   
  </body>  
  </html>

回复:再次求教ASP将大量的文本数据导入到数据库中问题31

学习!

回复:再次求教ASP将大量的文本数据导入到数据库中问题32

谢谢coltest(coltest)提供代码,由于我的例子不够恰当,误导您了,请看下面的例子:  
   
  <HTML>  
  <HEAD>  
  <META   NAME="GENERATOR"   Content="Microsoft   FrontPage   4.0">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  </HEAD>  
  <body   bgcolor="#99bbc3">  
  <P>  
  <%  
  Dim   strOutput    
  strOutput1="1234567890abcdefg中国公司CS中心             abcdef                     123.45"  
  strOutput2="1234567890abcdefg中国总公司                     abcdef                 9,123.45"  
  strOutput3="1234567890abcdefgABC   company   limited   abcdef       52,339,123.45"  
   
  Response.Write   "第一行数据"   &   "<br>"  
  str1=trim(mid(strOutput1,1,10))  
  str2=trim(mid(strOutput1,11,7))  
  str3=trim(mid(strOutput1,18,20))  
  str4=trim(mid(strOutput1,38,6))  
  str5=trim(mid(strOutput1,44,16))  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
   
  Response.Write   "第二行数据"   &   "<br>"  
  str1=trim(mid(strOutput2,1,10))  
  str2=trim(mid(strOutput2,11,7))  
  str3=trim(mid(strOutput2,18,20))  
  str4=trim(mid(strOutput2,38,6))  
  str5=trim(mid(strOutput2,44,16))  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
   
  Response.Write   "第三行数据"   &   "<br>"  
  str1=trim(mid(strOutput2,1,10))  
  str2=trim(mid(strOutput2,11,7))  
  str3=trim(mid(strOutput2,18,20))  
  str4=trim(mid(strOutput2,38,6))  
  str5=trim(mid(strOutput2,44,16))  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
   
  %>  
   
   
  </body>  
  </html>  
   
  下面是程序的输出结果  
  第一行数据  
  1234567890  
  abcdefg  
  中国公司CS中心   abcdef  
   
  123.45  
  第二行数据  
  1234567890  
  abcdefg  
  中国总公司   abcde  
  f  
  9,123.45  
  第三行数据  
  1234567890  
  abcdefg  
  中国总公司   abcde  
  f  
  9,123.45  
   
  这个结果不是我想要,我要的结果是:  
  1234567890  
  abcdefg  
  中国公司CS中心  
  abcdef  
  123.45  
  1234567890  
  abcdefg  
  中国总公司  
  abcdef  
  9,123.45  
  1234567890  
  abcdefg  
  ABC   company   limited  
  abcdef  
  52,339,123.45  
  需要说明的是,这些字符串是来自文本的,并不是只有三个。

回复:再次求教ASP将大量的文本数据导入到数据库中问题33

up

回复:再次求教ASP将大量的文本数据导入到数据库中问题34

用php可能会容易一些,我在别的论坛里边看到了一个类似的东西,那个能很好的解决文本到数据库的转换,要不要贴上来?

回复:再次求教ASP将大量的文本数据导入到数据库中问题35

我看的那个主要都是用的正则表达式

回复:再次求教ASP将大量的文本数据导入到数据库中问题36

如果你的系统是中文的,而不足的字节确实是用空格补的,那么我的方法没有错误,因为中文系统中,实际没有双字节的概念

回复:再次求教ASP将大量的文本数据导入到数据库中问题37

这样吧,alexzhang00(三角猫(sjcatsoft)),请您修改并运行我今天贴的例子程序,然后把结果贴上来,好吗?谢谢您的帮助。

回复:再次求教ASP将大量的文本数据导入到数据库中问题38

如果用ASP实在没有办法解决的话,我准备用ASP.net了,然后套用这个方法:  
  Function   MidMbcs(ByVal   str   as   String,   start,   length)  
        MidMbcs   =   StrConv(MidB(StrConv(str,   vbFromUnicode),   start,   length),   vbUnicode)  
  End   Function  
   
  Dim   MyString  
  MyString   =   "AbCdEfG"  
  ‘   Where   "A",   "C",   "E",   and   "G"   are   DBCS   and   "b",   "d",    
  ‘   and   "f"   are   SBCS.  
  MyNewString   =   Mid(MyString,   3,   4)  
  ‘   Returns   ""CdEf"  
  MyNewString   =   MidB(MyString,   3,   4)  
  ‘   Returns   ""bC"  
  MyNewString   =   MidMbcs(MyString,   3,   4)  
  ‘   Returns   "bCd"  
   
 

回复:再次求教ASP将大量的文本数据导入到数据库中问题39

双字节和单字节的使用可真是麻烦

回复:再次求教ASP将大量的文本数据导入到数据库中问题40

试试运行下面的代码,是否是你想要的结果?  
   
  <HTML>  
  <HEAD>  
  <META   NAME="GENERATOR"   Content="Microsoft   FrontPage   4.0">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  </HEAD>  
  <body   bgcolor="#99bbc3">  
  <P>  
  <%  
  Dim   strOutput(3),   i,   iDiff  
  strOutput(0)="1234567890abcdefg中国公司CS中心             abcdef                     123.45"  
  strOutput(1)="1234567890abcdefg中国总公司                     abcdef                 9,123.45"  
  strOutput(2)="1234567890abcdefgABC   company   limited   abcdef       52,339,123.45"  
   
  For   i   =   0   TO   2  
  Response.Write   "第"   &   i   +   1   &   "行数据"   &   "<br>"  
   
  str1=Cutstr(strOutput(i),1,10)  
  str2=Cutstr(strOutput(i),11,7)  
  str3=Cutstr(strOutput(i),18,20)  
  iDiff   =   20   -   len(str3)  
  str4=Cutstr(strOutput(i),38   -   iDiff,6)  
  str5=Cutstr(strOutput(i),44   -   iDiff,16)  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
   
  Next  
   
  REM   ###########################################  
  REM   截取字符Cutstr(str,start,num)  
  REM   参数列表:  
  REM                           str:   需截取的字符  
  REM   start:     开始位置  
  REM                           num:   截取数量  
  REM   ###########################################  
  Function   Cutstr(str,   start,   num)  
          Dim   k,   j,   a  
          k   =   0          
          Cutstr   =   ""  
          for   j   =   start   to   len(trim(str))  
                  a   =   mid(str,j,1)  
                   
                  if   asc(a)   <   0   then  
          k   =   k   +   2          
  else  
          k   =   k   +   1          
  end   if  
   
  Cutstr   =   Cutstr   &   a  
   
  If   k   =   num   Then  
          Exit   Function  
  End   If  
          Next  
          Cutstr   =   str  
  End   Function  
  %>  
   
   
  </body>  
  </html>  
 

回复:再次求教ASP将大量的文本数据导入到数据库中问题41

谢谢suncicy(suncicy),您的结果令人满意,您提供的方法也是到目前位置最让我满意的。  
  不过,我觉得还有一点欠缺,比如这几句:  
  iDiff   =   20   -   len(str3)  
  str4=Cutstr(strOutput(i),38   -   iDiff,6)  
  str5=Cutstr(strOutput(i),44   -   iDiff,16)  
  如果要处理的数据项比较多时,同时双字节数据项也比较多时,甚至每一个数据项都要这样处理才行,那么程序将非常容易写错,而且不太好找,您说呢?  
  还是要感谢您,如果10天之内没有比这个方法更令我满意的了,所有的分都给您。  
  再次谢谢您!

回复:再次求教ASP将大量的文本数据导入到数据库中问题42

up

回复:再次求教ASP将大量的文本数据导入到数据库中问题43

重写mid函数~~    
   
  好方法~

回复:再次求教ASP将大量的文本数据导入到数据库中问题44

可不可以写一个函数,类似mid的用法,可以按单字节方式来处理双字节。

回复:再次求教ASP将大量的文本数据导入到数据库中问题45

zwonline99(zwonline)提的意见很对,当双字节数据比较多时容易写错。  
  我稍微修改了程序,这样就不用去考虑该数据是否是双字节问题了,你测试看看。  
   
  <HTML>  
  <HEAD>  
  <META   NAME="GENERATOR"   Content="Microsoft   FrontPage   4.0">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  </HEAD>  
  <body   bgcolor="#99bbc3">  
  <P>  
  <%  
  Dim   strOutput(3),   i,   iDiff  
  strOutput(0)="1234567890abcdefg中国公司CS中心             abcdef                     123.45"  
  strOutput(1)="1234567890abcdefg中国总公司                     abcdef                 9,123.45"  
  strOutput(2)="1234567890abcdefgABC   company   limited   abcdef       52,339,123.45"  
   
  For   i   =   0   TO   2  
  Response.Write   "第"   &   i   +   1   &   "行数据"   &   "<br>"  
   
  str1=Cutstr(strOutput(i),1,10)  
  str2=Cutstr(strOutput(i),11,7)  
  str3=Cutstr(strOutput(i),18,20)  
  str4=Cutstr(strOutput(i),38   ,6)  
  str5=Cutstr(strOutput(i),44,16)  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
   
  Next  
   
  REM   ###########################################  
  REM   截取字符Cutstr(str,start,num)  
  REM   参数列表:  
  REM                           str:   需截取的字符  
  REM   start:     开始位置  
  REM                           num:   截取数量  
  REM   ###########################################  
  Function   Cutstr(str,   start,   num)  
          Dim   k,   j,   a,   m,   iFlag  
          k   =   0  
          m   =   0          
          iFlag   =   0  
          Cutstr   =   ""  
          For   j   =   1   TO   start   -   1  
          a   =   mid(str,j,1)          
          if   asc(a)   <   0   then  
          m   =   m   +   2  
          iFlag   =   1      
  else  
          m   =   m   +   1          
  end   if  
          Next            
          If   iFlag   =   0   Then          
          m   =   start    
        Else  
        ‘对有双字节情况进行特殊处理  
        m   =   start   -   (m   -   (start   -   1))  
        End   If        
          For   j   =   m   To   len(trim(str))  
                  a   =   mid(str,j,1)  
                   
                  if   asc(a)   <   0   then  
          k   =   k   +   2          
  else  
          k   =   k   +   1          
  end   if  
   
  Cutstr   =   Cutstr   &   a  
   
  If   k   >=   num   Then  
          Exit   Function  
  End   If  
          Next          
  End   Function  
  %>  
   
   
  </body>  
  </html>  
 

回复:再次求教ASP将大量的文本数据导入到数据库中问题46

谢谢suncicy(suncicy),您的程序我已经运行过了,表面上看很不错,但是我将数据又改动了一下,问题就出来了,您再测试一下这个程序。谢谢您的大力帮助,您可真是一位热心人。  
  <HTML>  
  <HEAD>  
  <META   NAME="GENERATOR"   Content="Microsoft   FrontPage   4.0">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  </HEAD>  
  <body   bgcolor="#99bbc3">  
  <P>  
  <%  
  Dim   strOutput(3),   i,   iDiff  
  strOutput(0)="1234567890abcdefg中国公司CS中心             abcdef                     123.45中国公司CS中心             abcdef                     123.45"  
  strOutput(1)="1234567890abcdefg中国总公司总公司         abcdef         1,235,123.45中国总公司总公司         abcdef         1,235,123.45"  
  strOutput(2)="1234567890abcdefgABC   company   limited   abcdef       52,339,123.45ABC   company   limited   abcdef       52,339,123.45"  
   
  For   i   =   0   TO   2  
  Response.Write   "第"   &   i   +   1   &   "行数据"   &   "<br>"  
   
  str1=Cutstr(strOutput(i),1,10)  
  str2=Cutstr(strOutput(i),11,7)  
  str3=Cutstr(strOutput(i),18,20)  
  str4=Cutstr(strOutput(i),38   ,6)  
  str5=Cutstr(strOutput(i),44,16)  
  str6=Cutstr(strOutput(i),60,20)  
  str7=Cutstr(strOutput(i),80,6)  
  str8=Cutstr(strOutput(i),86,16)  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
  Response.Write   str6   &   "<br>"  
  Response.Write   str7   &   "<br>"  
  Response.Write   str8   &   "<br>"  
   
  Next  
   
  REM   ###########################################  
  REM   截取字符Cutstr(str,start,num)  
  REM   参数列表:  
  REM                           str:   需截取的字符  
  REM   start:     开始位置  
  REM                           num:   截取数量  
  REM   ###########################################  
  Function   Cutstr(str,   start,   num)  
          Dim   k,   j,   a,   m,   iFlag  
          k   =   0  
          m   =   0          
          iFlag   =   0  
          Cutstr   =   ""  
          For   j   =   1   TO   start   -   1  
          a   =   mid(str,j,1)          
          if   asc(a)   <   0   then  
          m   =   m   +   2  
          iFlag   =   1      
  else  
          m   =   m   +   1          
  end   if  
          Next            
          If   iFlag   =   0   Then          
          m   =   start    
        Else  
        ‘对有双字节情况进行特殊处理  
        m   =   start   -   (m   -   (start   -   1))  
        End   If        
          For   j   =   m   To   len(trim(str))  
                  a   =   mid(str,j,1)  
                   
                  if   asc(a)   <   0   then  
          k   =   k   +   2          
  else  
          k   =   k   +   1          
  end   if  
   
  Cutstr   =   Cutstr   &   a  
   
  If   k   >=   num   Then  
          Exit   Function  
  End   If  
          Next          
  End   Function  
  %>  
   
   
  </body>  
  </html>  
 

回复:再次求教ASP将大量的文本数据导入到数据库中问题47

不好意思,没有考虑其他情况,差点误导楼主:)  
  还是按照第一次的思路修改了程序,估计不会再有错误。但还存在一个缺陷:  
  不能单独运行其中一个语句,如:str6=Cutstr(strOutput(i),60,20)。  
  必须运行其前面的,特别是带有双字节的语句才能保证不出错。  
  不知楼主及各位大侠还有没更好的方法?  
   
  <HTML>  
  <HEAD>  
  <META   NAME="GENERATOR"   Content="Microsoft   FrontPage   4.0">  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  </HEAD>  
  <body   bgcolor="#99bbc3">  
  <P>  
  <%  
  Dim   strOutput(3),   i,   m    
   
  strOutput(0)="1234567890abcdefg中国公司CS中心             abcdef                     123.45中国公司Cb中心             abcdef                     123.45"  
  strOutput(1)="1234567890abcdefg中国总公司总公司         abcdef         1,235,123.45中国总公司总公司         abcdef         1,235,123.45"  
  strOutput(2)="1234567890abcdefgABC   company   limited   abcdef       52,339,123.45ABC   company   limited   abcdef       52,339,123.45"  
   
  For   i   =   0   TO   2  
  Response.Write   "第"   &   i   +   1   &   "行数据"   &   "<br>"  
   
  m   =   0  
   
  str1=Cutstr(strOutput(i),1,10)  
  str2=Cutstr(strOutput(i),11,7)  
  str3=Cutstr(strOutput(i),18,20)  
  str4=Cutstr(strOutput(i),38   ,6)  
  str5=Cutstr(strOutput(i),44,16)  
  str6=Cutstr(strOutput(i),60,20)  
  str7=Cutstr(strOutput(i),80,6)  
  str8=Cutstr(strOutput(i),86,16)  
   
  Response.Write   str1   &   "<br>"  
  Response.Write   str2   &   "<br>"  
  Response.Write   str3   &   "<br>"  
  Response.Write   str4   &   "<br>"  
  Response.Write   str5   &   "<br>"  
  Response.Write   str6   &   "<br>"  
  Response.Write   str7   &   "<br>"  
  Response.Write   str8   &   "<br>"  
   
  Next  
   
  REM   ###########################################  
  REM   截取字符Cutstr(str,start,num)  
  REM   参数列表:  
  REM                           str:   需截取的字符  
  REM   start:     开始位置  
  REM                           num:   截取数量  
  REM   ###########################################  
  Function   Cutstr(str,   start,   num)  
          Dim   k,   j,   a,   iFlag  
          k   =   0                  
          iFlag   =   0  
          Cutstr   =   ""                
         
          For   j   =   start   -   m   To   len(trim(str))  
                  a   =   mid(str,j,1)  
                   
                  if   asc(a)   <   0   then  
          k   =   k   +   2  
          iFlag   =   1          
  else  
          k   =   k   +   1          
  end   if  
   
  Cutstr   =   Cutstr   &   a  
   
  If   k   >=   num   Then  
  If   iFlag   =   1   Then  
  m   =   m   +   (num   -   len(Cutstr))  
  End   If  
          Exit   Function  
  End   If  
          Next          
  End   Function  
  %>  
   
   
  </body>  
  </html>  
 

回复:再次求教ASP将大量的文本数据导入到数据库中问题48

suncicy(suncicy)   ,好极了,您的程序我还要测试一下。

回复:再次求教ASP将大量的文本数据导入到数据库中问题49

先导入access,然后再吧*.mdb导入sql

回复:再次求教ASP将大量的文本数据导入到数据库中问题50

回复iamdan(egg天下),您的方法太复杂,如果让您每天导入20个不同格式的文本,您愿意吗?反正我们这里的业务人员不愿意。

回复:再次求教ASP将大量的文本数据导入到数据库中问题51

再次感谢suncicy(suncicy)!!!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多