刚学SQL有个导入问题

newpowersky 2014-08-06 07:16:18
如果有这样一个文本文件内容包括:

发站: 漳州北 福州分区(1163) 南昌局.南 福建.闽(35) 国铁正式营业线[ 0]
到站: 玉溪南 昆明分区(1596) 昆明局.昆 云南.云(53) 国铁正式营业线[ 0]
经由:

径路类型:整车

全程:2581, 计费:284, 基金:284, 杂费:0

分界站数据:
1 琥市(RAQ 1590) 284公里 大 入 福州-> 广梅
2 东莞东(DMQ 1589) 720公里 小 出 广梅-> 广深
3 广州(GZQ 1431) 814公里 小 入 广深-> 广州
4 广州西(GXQ 1580) 820公里 小 入 广州-> 三茂
5 茂名(MMZ 1654) 1189公里 大 入 三茂-> 柳州
6 威舍(WSM 1992) 2156公里 大 入 柳州-> 昆明

经由分区数据:
1 福州 (1163) 284公里
2 广梅 (1264) 436公里
3 广深 (1265) 94公里
4 广州 (1266) 6公里
5 三茂 (1267) 369公里
6 柳州 (1371) 967公里
7 昆明 (1596) 425公里

省份里程数据:
1 福建.闽(35) 284公里
2 广东.粤(44) 1001公里
3 广西.桂(45) 722公里
4 贵州.贵(52) 149公里
5 云南.云(53) 425公里

就有很多这样形式的文本文件,我如何做可以把到站发站,这二个字段放在表中。分界站数据横放在表中.
SQL可以实现吗?
...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy_z 2014-08-08
  • 打赏
  • 举报
回复
将数据分类规范后再分别导入吧,这么复杂的格式,太难了。
唐诗三百首 2014-08-07
  • 打赏
  • 举报
回复
引用 3 楼 newpowersky 的回复:
VF下可以用这样的实现!全部导入一个表中!
LZV5, SQL实现比较麻烦, 建议用程序实现.
newpowersky 2014-08-06
  • 打赏
  • 举报
回复
set talk off
set stat on
set dele on

clear wind
close all
clear

if .not.file('rout\welroutnew.txt')
?
? 'Not found Data file : rout\welroutnew.txt'
=inkey(3)
clear
return
endif

if file('welroutxt.dbf')
erase welroutxt.dbf
endif
creat table welroutxt ( fz C(3), fzhz C(10), dz C(3), dzhz C(10);
  , bdi C(2), bdo C(2), b2 C(2), bdic C(2), bdoc C(2), fjk C(120),verc C(8) )

close all
sele 2
use welroutxt
zap
appe blank

sele 1
creat table txt100 ( txt C(100) )
zap
appe sdf from rout\welroutnew.txt
go top
recnum=0

do while .not.eof(1)

do while subs(txt,1,5)<>'发站:' and .not.eof(1)
skip
enddo
if eof(1)
?
? '分析路径文本完成.'
exit
endif

@ 3,6 say str(recn(),8)+'  /'+str(recc(),8)+'     '

recnum=recn()
fzhz1=trim(subs(txt,7,10))
skip
dzhz1=trim(subs(txt,7,10))
skip 8  && Seek for 分界站
fjk0=''
fjk1=''
fjk2=''
fjk3=''
fjk4=''

do while subs(txt,5,10)>' '
fjk1=ltrim(subs(txt,5,10))
fjk0=fjk0+','+fjk1

if at(fjk1,'株洲,蒲圻,滩头湾,楠木塘;大龙,秀山;西斋;牙屯堡;;')>0
fjk2=fjk2+':'+padr(fjk1,6)
endif

if at(fjk1,';天水;平顶山西;郜营;胡家营;虞城县;')>0
  fjk3=':'+padr(fjk1,6)
endif
if at(fjk1,';叶集;淮滨;攀枝花;凤凰山;六盘水南;')>0
  fjk3=':'+padr(fjk1,6)
endif
if at(fjk1,';茂名,定南,琥市;;西河村,麻尾,威舍,达州,广元;')>0
  fjk3=':'+padr(fjk1,6)
fjk3=strtran(fjk3,'西河村','河西村')
endif

if len(trim(fjk2))>15 and at('西河村',fjk2)>0
fjk2=strtran(fjk2,'西河村','')
endif
if len(trim(fjk2))>15 and at('河西村',fjk2)>0
fjk2=strtran(fjk2,'河西村','')
endif
if len(trim(fjk2))>15 and at(':麻尾  ',fjk2)>0
fjk2=strtran(fjk2,':麻尾  ','')
endif
if len(trim(fjk2))>15 and at(':威舍  ',fjk2)>0
fjk2=strtran(fjk2,':威舍  ','')
endif
if len(trim(fjk2))>15 and at(':达州  ',fjk2)>0
fjk2=strtran(fjk2,':达州  ','')
endif
if len(trim(fjk2))>15 and at(':广元  ',fjk2)>0
fjk2=strtran(fjk2,':广元  ','')
endif

skip
enddo

if len(trim(fjk2))<1
fjk2=fjk3
endif
fjk2=padr(fjk2,21,' ')

fjk4=fjk2+':'+fjk0

sele 2
*use rout\welroutxt
appe blank
repl fzhz with fzhz1, dzhz with dzhz1, fjk with fjk4

sele 1

enddo  && Seek fz In welroutnew.txt

use


sele 3
use welzmb alias zmb

sele 2
go top

scan all

@ 8,6 say str(recn(),8)+'  /'+str(recc(),8)+'     '

fzhz1=trim(fzhz)
dzhz1=trim(dzhz)
sele zmb
loca for zmhz=fzhz1 and zmm<>b.fz
if found()
sele 2
repl fz with zmb.zmm
if at(zmb.fj,'HH,CS,SC')>0
repl bdic with '99'
endif
endif

sele zmb
loca for zmhz=dzhz1 and zmm<>b.dz
if found()
sele 2
repl dz with zmb.zmm
if at(zmb.fj,'HH,CS,SC')>0
repl bdoc with '99'
endif
endif

sele 2
bdic1=subs(fjk,2,2)
bdoc1=subs(fjk,9,2)
if empty(bdoc1) and empty(bdoc)
bdoc1=bdic1
endif

if subs(fz,3,1)='Q' and empty(bdic1)
  bdic1='99'
endif
if subs(dz,3,1)='Q' and empty(bdoc1)
  bdoc1='99'
endif

if empty(bdic)
repl bdic with bdic1
endif
if empty(bdoc)
repl bdoc with bdoc1
endif

if subs(fz,3,1)<>'Q' and empty(bdic)
*repl bdic with 'oo'
endif
if subs(dz,3,1)<>'Q' and empty(bdoc)
*repl bdoc with 'oo'
endif

if subs(fz,3,1)='Q' and bdic=bdoc
*repl bdic with '99'
endif
if subs(dz,3,1)='Q' and bdic=bdoc
*repl bdoc with '99'
endif

sele 2
fz1=fz
dz1=dz

sele 2
scat to memovar
sele zmb
loca for zmb.zmhz=fzhz1 and zmb.zmm<>b.fz
if found()
sele 2
inse blank
gath from memovar
repl fz with zmb.zmm
endif
sele 2
scat to memovar
sele zmb
loca for zmb.zmhz=dzhz1 and zmb.zmm<>b.dz
if found()
sele 2
inse blank
gath from memovar
repl dz with zmb.zmm
endif

if 1=1
sele 2
scat to memovar
sele zmb
loca for zmb.zmm=b.fz and zmb.zmhz<>b.fzhz
if found()
sele 2
inse blank
gath from memovar
repl fzhz with zmb.zmhz
endif
sele 2
scat to memovar
sele zmb
loca for zmb.zmm=b.dz and zmb.zmhz<>b.dzhz
if found()
sele 2
inse blank
gath from memovar
repl dzhz with zmb.zmhz
endif

sele 2
scat to memovar
sele zmb
loca for zmb.zmm=fz1 and zmb.zmhz<>fzhz1
if found()
sele 2
inse blank
gath from memovar
repl fz with fz1, fzhz with zmb.zmhz
endif
sele 2
scat to memovar
sele zmb
loca for zmb.zmm=dz1 and zmb.zmhz<>dzhz1
if found()
sele 2
inse blank
gath from memovar
repl dz with dz1, dzhz with zmb.zmhz
endif

endif && appe same zmhz or zmlm

sele 2
endscan

repl fz with 'FGZ' for empty(fz) and fzhz='防城港口'
repl dz with 'FGZ' for empty(dz) and dzhz='防城港口'
repl fz with 'DIQ', bdic with '99' for empty(fz) and fzhz='张家界南'
repl dz with 'DIQ', bdoc with '99' for empty(dz) and dzhz='张家界南'

brow title '分界口太多或太少' for .not.empty(fzhz) and ( len(trim(subs(fjk,1,21)))>15;
  or empty(subs(fjk,1,21)) and (subs(fz,3,1)<>'Q' or subs(dz,3,1)<>'Q') )

*repl all cars with 1
copy sdf to rout\welrout0.txt for .not.empty(fzhz) and .not.empty(dzhz)
close all
use txt100
zap

do welroutadd

return

VF下可以用这样的实现!全部导入一个表中!
霜寒月冷 2014-08-06
  • 打赏
  • 举报
回复
这种格式的文件,用程序实现起来都吃力的,更别说直接用sqlerver 来实现,数据格式最好 统一,就像excel 表格 一列 对应 某类型的数据。
reenjie 2014-08-06
  • 打赏
  • 举报
回复
數據格式不規範,無法導入。
第一篇 Oracle管理配置 第1章 Oracle安装配置(教学视频:10分钟) 23 1.1 Oracle简介 23 1.1.1 数据库术语 23 1.1.2 主流数据库简介 24 1.1.3 Oracle数据库的特点 24 1.2 安装Oracle数据库 25 1.2.1 Oracle数据库的版本变迁及安装环境 25 1.2.2 安装过程 26 1.2.3 安装中需要注意的问题 27 1.3 本章小结 28 1.4 习题 28 第2章 Oracle常用工具(教学视频:7分钟) 29 2.1 Net Configuration Assistant(网络配置助手) 29 2.1.1 监听程序配置 29 2.1.2 命名方法配置 31 2.1.3 本地Net服务名配置 32 2.2 Net Manager(网络管理员) 34 2.3 本章实例 36 2.4 本章小结 38 2.5 习题 38 第3章 SQL Plus和PL/SQL(教学视频:11分钟) 39 3.1 SQL Plus与PL/SQL简介 39 3.2 使用SQL Plus 40 3.2.1 登录SQL Plus 40 3.2.2 SQL Plus输出结果的格式化 41 3.2.3 SQL Plus小结 46 3.3 PL/SQL 46 3.3.1 PL/SQL常用开发工具 46 3.3.2 开发一个简单的PL/SQL程序 48 3.4 本章实例 49 3.5 本章小结 50 3.6 习题 50 第二篇 Oracle数据库对象 第4章 Oralce数据库(教学视频:15分钟) 51 4.1 创建Oracle数据库 51 4.2 Oracle数据库的相关术语 52 4.2.1 数据库 53 4.2.2 数据库实例和SID 53 4.2.3 ORACLE_SID 54 4.3 Oracle数据库的备份与恢复 55 4.3.1 逻辑备份/恢复(导出/导入) 55 4.3.2 物理备份/恢复 56 4.3.3 利用PL/SQL Developer备份数据库 60 4.4 本章实例 61 4.5 本章小结 61 4.6 习题 62 第5章 Oracle数据表对象(教学视频:42分钟) 63 5.1 Oracle表空间 63 5.1.1 Oracle表空间简介 63 5.1.2 创建Oracle表空间 64 5.1.3 查看表空间 66 5.1.4 修改数据库默认表空间 67 5.1.5 修改表空间名称 68 5.1.6 删除表空间 69 5.2 创建Oracle数据表 70 5.2.1 利用工具创建数据表 70 5.2.2 利用工具查看数据表 71 5.2.3 利用命令创建数据表 72 5.2.4 利用命令查看表结构 72 5.3 修改Oracle数据表结构 73 5.3.1 利用工具修改数据表结构 73 5.3.2 利用命令修改数据表结构 74 5.4 删除数据表 75 5.4.1 利用工具删除数据表 76 5.4.2 利用SQL语句删除数据表 76 5.5 备份/恢复数据表 76 5.5.1 利用工具备份/恢复数据表 77 5.5.2 利用命令备份/恢复数据表 82 5.6 临时表 83 5.6.1 临时表简介 83 5.6.2 会话级临时表 84 5.6.3 事务级临时表 85 5.6.4 查看临时表在数据库中的信息 86 5.6.5 临时表的应用场景 86 5.7 特殊的表dual 87 5.7.1 分析dual表 87 5.7.2 dual表的应用场景 87 5.7.3 修改dual表对查询结果的影响 88 5.8 本章实例 89 5.9 本章小结 90 5.10 习题 90 第6章 约束(教学视频:43分钟) 91 6.1 主键约束 91 6.1.1 主键简介 91 6.1.2 创建主键约束 92 6.1.3 修改表的主键约束 94 6.1.4 主键应用场景 96 6.2 外键约束 97 6.2.1 外键简介 97 6.2.2 创建外键约束 97 6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 6.4 检查约束 108 6.4.1 检查约束简介 108 6.4.2 创建检查约束 108 6.4.3 修改检查约束 110 6.4.4 检查约束的使用 111 6.5 默认值约束 111 6.5.1 默认值约束简介 112 6.5.2 创建默认值约束 112 6.5.3 修改默认值约束 113 6.6 本章实例 115 6.7 本章小结 116 6.8 习题 116 第7章 视图(教学视频:50分钟) 117 7.1 关系视图 117 7.1.1 建立关系视图 117 7.1.2 修改/删除视图 118 7.1.3 联接视图 120 7.1.4 编译视图 122 7.1.5 使用force选项强制创建视图 124 7.1.6 利用视图更新数据表 125 7.1.7 with check option选项 126 7.1.8 关系视图小结 128 7.2 内嵌视图 128 7.2.1 内嵌视图简介 128 7.2.2 内嵌视图的使用 128 7.2.3 内嵌视图小结 130 7.3 对象视图 131 7.3.1 对象视图简介 131 7.3.2 对象视图简介 131 7.4 物化视图 133 7.4.1 物化视图简介 133 7.4.2 物化视图的使用 133 7.4.3 物化视图的数据加载 135 7.4.4 物化视图的数据更新 135 7.4.5 查询重写 136 7.5 本章小结 136 7.6 本章实例 137 7.7 习题 137 第8章 函数与存储过程(教学视频:48分钟) 138 8.1 函数 138 8.1.1 函数简介 138 8.1.2 创建函数 139 8.1.3 函数中的括号 140 8.1.4 函数的参数 141 8.1.5 函数的确定性 142 8.1.6 典型函数举例 143 8.2 存储过程 144 8.2.1 存储过程简介 144 8.2.2 创建存储过程 144 8.2.3 存储过程的参数——IN参数 146 8.2.4 存储过程的参数——OUT参数 147 8.2.5 存储过程的参数——IN OUT参数 149 8.2.6 存储过程的参数——参数顺序 149 8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11章 序列(教学视频:28分钟) 206 第12章 用户角色与权限控制(教学视频:45分钟) 215 第三篇 Oracle中的SQL 第13章 Oracle数据类型(教学视频:21分钟) 231 第14章 Oracle中的函数与表达式(教学视频:111分钟) 240 第15章 Oracle中的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章 SQL更新数据(教学视频:34分钟) 319 第四篇 Oracle编程高级应用 第18章 数据库速度优化与数据完整性(教学视频:32分钟) 332 第19章 数据一致性与事务管理(教学视频:46分钟) 341 第20章 并发控制(教学视频:35分钟) 356 第21章 Oracle中的正则表达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发中的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发中的应用(教学视频:12分钟) 391
本课程根据讲师十多年在世界500强外企的生产环境中的SQL Serer数据库管理和项目实施经验倾心打造。课程系统性强,知识体系完整,覆盖90%以上的企业环境下SQL Server高可用场景,课程中不仅演示详细的操作步骤,更加突出最常见的故障和问题,让学员少走“弯路”,不只是让学员学会“操作”更能让学员“操作”的规范,满满的干货分享,一些课程资料(架构图、部署规划表格等)不仅可以帮助学员掌握技能,也可以作为学员在企业生产环境中实施SQL Server高可用的配置文档、操作手册等。课程的实验环境介绍:1)全部基于微软域环境和企业版SQL Server AOAG - 95%以上的企业环境都是在域环境中,不介绍非域环境和标准版的SQL Server高可用性组,这的配置在企业中较罕见,没有实践意义,不浪费学员时间。2)相应域环境已提前部署和配置好 - 学员导入虚拟机即可开始实验,无需从零开始搭建域环境,所有实验中SQL Server均已加域,直入主题,节省大量时间。3)最新的Windows Server故障转移集群(WS2016、WS2019)和最新版本的SQL Server(SQL2017、SQL2019) -  WS2016-SQL2017与WS2019-SQL2019是目前大多数企业SQL Server高可用的主要平台,基于微软产品生命周期现在一些企业也在讲早期的AOAG向这两个版本迁移,掌握这两种组合不仅让学员学会,更能学有所用。本课程为后续SQL Server进阶课程铺垫,是通向SQL Server DBA 专家的必经之路,讲师每周答疑两次。所有课程资料包括:课程PPT、架构图、部署规划表格、各类脚本学员均可下载。     

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧