ww111222 发表于 2011-10-4 13:42:27

[讨论]脚本编程:txt文本账号导入ROS的思路及具体代码

本帖最后由 ww111222 于 2011-10-4 13:45 编辑

学习ROS也有一段时间了,为了锻炼自己的脚本水平, 在学习了 **家 的视频教程后,给自己布置了一顶作业:

用脚本导入 文本账号。


文本账号 信息如下:

EndDate   Name       Address    Tel                   Bandwidth   User               Pass
======        ======        ======        ========= ======= ========= ===========
201110        王大夫        1单元402        13999393998 4M                158099184001234567890
201206        刘伟        2单元401        6922171             4M                1580991881609876655


其中:第1行 和 第2行 是提示信息
从第3行开始才是 具体的账号信息。

我想在导入后得到如下账号:

账号的comment信息:(王大夫)(1单元402)(13999393998)
账号为:15809918400 密码为:1234567890,Profile为 自定义的 4M 的配置。

ww111222 发表于 2011-10-4 13:46:31

本帖最后由 ww111222 于 2011-10-4 13:52 编辑

#pick用法 截取abcde里从1到3的内容得到 bc
# :put [:pick "abcde" 1 3 ] 得到 bc

#find用法 从$lastEnd开始 查找字符串或数组中第一个出现查找内容的位置
# :put [:find "abcdefghigk" g 3]得到6
# :put [:find "abcdefghigk" g ]得到6
# :put [:find "abcdefghigk" g 6] 得到9



#获得文本内容
:global content contents]

#获得文本长度
:globalcontentLen [ :len $content ]

#每行结尾标志
:global lineEnd 0

#每行的内容
:global line ""

#每一行的开始位置
:global lastEnd 0

#查找 第2行末[=\r\n(回车换行符)]的位置,从第0位开始
:set lineEnd [ :find $content "=\r\n" $lastEnd ]
:put $lineEnd

#去掉 前两行 的提示内容,获得真正账号信息
#第3行开始的位置:$lineEnd + 3
:global TempContent 0
:set TempContent [ :pick $content ($lineEnd + 3) $contentLen ]
:put $TempContent

#得到实际账号信息的长度
:set contentLen [ :len $TempContent ]
:set lineEnd 0
:set lastEnd 0

#打印所有变量的值
:environment print





====================================================

下面的问题是如何 得到 以空格 分隔 的信息。

ww111222 发表于 2011-10-4 15:54:31

本帖最后由 ww111222 于 2011-10-4 22:56 编辑

奇怪了,在ROS里 不认 文本文件里用TAB生成的空格间隔。

用:
:find $line " " $lineTop

无法找到 空格



#循环执行
:while ($lineEnd != $TXTcontentLen) do={

        #查找 第一个 \r\n(回车换行符)的位置,从0开始 得到每一行的长度
        :set lineEnd [ :find $TXTcontent "\r\n" $lineTop ]
        :put $lineEnd
       
        #取得 账号信息 一行 的内容
        :set line [ :pick $TXTcontent $lineTop $lineEnd ]
        :put $line

        #得到当前行的长度
        :global lineLength [ :len $line ]
        :put $lineLength
       
        :set lineEnd $TXTcontentLen
        :put $TXTcontentLen
       
        #得到当前行EndDate的位置
        :global EndDateEnd 0
        :set EndDateEnd [ :find $line " " $lineTop ]
        :put $EndDateEnd
       
        #得到EndDate的文本内容
        :local EndDateTXT ""
        :set EndDateTXT [ :pick $line $lineTop $EndDateEnd ]
        :put $EndDateTXT
       

}








========================
哈哈,解决了。原来 TAB 产生的空格是 \t 来表示

okpan 发表于 2011-10-5 09:50:53

虽然用不上,但还是要顶一下。

kyer2012 发表于 2011-10-5 11:06:53

不错,谢谢了!

ww111222 发表于 2011-10-5 15:12:40

本帖最后由 ww111222 于 2011-10-5 15:14 编辑

今天测试了一下, 基本上 达到 要求了。














还有一个难题:



   取得4M这个值后,:set TempTXT5


用 profile=$TempTXT5 居然提示错误。


ycs 发表于 2011-12-20 00:33:14

要顶一下:handshake

aigood 发表于 2012-1-12 11:48:24

路过学习学习!!!

lcmymy0518 发表于 2012-1-12 12:37:01

会命令,,的就是学的快呀

jiangyufu 发表于 2012-1-13 14:41:55

:$:$很好,很不错,学习了

46811717 发表于 2012-2-27 15:08:22

希望楼主继续分享学习笔记

ycdjh 发表于 2012-2-27 18:55:20

:victory:感谢分享

kingsin 发表于 2012-5-26 13:13:14

好贴,顶,,,,,正要向你请教呢,呵呵

bill_deng 发表于 2012-5-26 13:24:22

不错,支持一下。

greney 发表于 2013-5-31 09:29:10

楼主可以留个QQ联系方式吗 有问题请教你
页: [1] 2
查看完整版本: [讨论]脚本编程:txt文本账号导入ROS的思路及具体代码