mud_sanc 板


LINE

这篇主要讲我最近写过的程式。 filter_data.asp 这个程式其实有用到我在圣殿写 select 指令的经验,因为 select 後面接的东西是「不定数目」的,而 select 可以依 据所给的数目,产生相符的资料列表。 filter_data 的概念类似,比方我有 10000 笔资料,每个资 料有 n 个资料项目,而我希望程式可以为我筛出我想要的资 料,简易写法就是.. ' 以 , 号分隔 tmps = split(request("input_data"),",") ' 取出 sizeof(tmps) j = CInt(UBound(tmps)) tmp="<table>" ' 10000 笔资料 for each data in datas ' 取得回应的 xml 本文 set xml = Https.ResponseText jj = 0 ' 先判断 xml 里面的资料是否完全符合筛选条件 for i = 0 to j if InStr(xml,tmps(i) > 0 then jj = jj+1 end if next ' 完全 match 才显示 if jj = j then tmp=tmp & "<tr><th>" & data.name & "</th>" for i = 0 to j tmp = tmp & "<th>" & data.item(i) & "</th>" next tmp=tmp & "</tr>" end if next 其显示的结果类似底下 给定的筛选条件: level, gender, race 输出的结果 ┌──────┬──┬──┬───┐ │laechan │120 │male│human │ ├──────┼──┼──┼───┤ │norr │120 │male│devil │ ├──────┼──┼──┼───┤ │.... 给的筛选条件越多,列表就会越长。 data_list.asp、data_show.asp、data_modify.asp data_list.asp 是把捞出的 10000 笔资料做列表用。 然後每一笔资料都会设超连结,点下去後就会呼叫 data_show.asp,它会显示该笔资料的可变更项目以 及不可变更项目,可变更的包括.. 直接改值 <input type=text name=xxx value=ooo> 下拉式选单 <select name=xxx><option selected>选项1<option>选项2...</select> 比方某笔资料若以厂商附的程式去设定,其某资料项 目的下拉可选项多达数百笔,但实际上只有几十笔会 用到而已,因此若用我写的网页介面去选就很快,因 为我有把不会用到的那数百笔略过。 假设有更动资料,就会使用到底下的按钮 <input type=submit name=submit1 value=update> 它会在页面出现一个[update]钮, 按下去後它会呼叫 data_modify.asp, 这时就根据我传过去给它的资料来 做更新,其方式如下... for each item in request.form response.write "item name = " & item response.write "item value = " & request.form(item) next 所以就会有 keyname 跟其对应值,这时就可以包成 xml.. tmp = "" for each item in request.form tmp = tmp & "<" & item & ">" & request.form(item) & "</" & item & ">" next 比方某个 item 是 "UserLevel", 值是 120, 那经过 上面的包装就变成.. <UserLevel>120</UserLevel> 包成 xml 後丢给 server 就可以更新该笔资料。 再来是一些 html 语法 让页面固定以繁体中文显示 <Meta Http-Equiv="Content-Type" Content="text/html; Charset=Big5"> 设定本文的背景颜色 <body bgcolor=#FFFFCC> 在网页显示一个文字输入区 <textarea name=textarea cols=100 rows=20></textarea> 它必须被包在 form 里面, 则读取这个文字输入区的值的方法 就是 request.form("textarea") (也就是说读它的方法并不是 request("textarea") ) 而在 textarea 里面的换行(\n), 其符号则是 vbcrlf 附带一提, 还有 vbtab 这个就相当於按 tab 键後的符号 读取 client 端的 ip 位址 <% ip = Request.ServerVariables("REMOTE_ADDR") %> 相关字串函数 len(str) 读取字串长度 mid(str,a,b) 从字串的第a个字元开始, 读取长度b的字串 例如 mid("123456",3,3) = "345" InStr(str,substr) 它会回传 substr 在 str 的第几个位置 例如 InStr("123456","345") = 3 replace(str,substr1,substr2) 把 str 里面的 substr1 换成 substr2 CInt(str) 把某个变数强制变成整数 CStr(str) 把某个变数强制变成字串 CLng(str) 把某个变数强制变成长整数(>32767用的) 其中差点被 CLng 搞死,因为 VB 的整数范围是 -32767~32767 ,可是我要处理的资料范围有时会超过(因为是用编号制),在 for 时就会出问题,因此要先经过长整数的处理. 再来讲一个 response.cookies 的替代方法,它很好用,但 是它不能用来纪录一些键值为特殊符号的东西, 例如... keyname = "123&" 它在做 response.cookies(keyname) 时会出问题。 我後来就采用以前在圣殿用过的方法,改用阵列储存,方式 如下.. 原本: for each item in request.form response.cookies(item) = request.form(item) next 改成 dim data1(10000) dim data2(10000) i = 1 for each item in request.form data1(i) = item data2(i) = request.form(item) i = i + 1 next 排序的时候就这样做,比方我们希望依照 item 的字串顺序排 for i1 = 0 to i-1 for i2 = 1 to i if strcomp(data1(i1),data1(i2)) > 0 then ' 调换两个 data1 的位置 tmp = data1(i1) data1(i1) = data1(i2) data1(i2) = tmp ' 同时别忘了也要调换两个 data2 的位置 tmp = data2(i1) data2(i1) = data2(i2) data2(i2) = tmp end if next next strcomp 即 strcmp(c, java, ..),而上面使用的就是简单的 排序方法。 ASP 里面函数的简易使用方法 <% function test_func(a) test_func = "<th align=left>" & a & "</th>" end function %> 它的意思就是,比方说我们令 tmp = test_func("abc") 那麽它的结果就是 <th align=left>abc</th> 也就是直接把函数名当成变数来用,则到 end function 之前 看 test_func 的值变成什麽, 它就会是函数的回传值. 函数可以有效缩减程式行数并减少错误。 在公司写程式可以写的这麽顺利,很大的原因归功於在圣殿跟 字串、阵列、mapping 资料等「搏斗」的经验,尤其是字串处 理,大抵上难搞的字串处理在圣殿几乎都经历过了,例如说 /u/l/laechan/workroom.c 1.解出 workroom.c (档案名) 2.解出 /u/l/laechan/ (目录名) 3.去掉 .c (物件用) 像这种的我若在圣殿就会用 while 居多(土法炼钢的话),在 asp 我更直接─用 for 硬干。 第二个原因仍旧是在圣殿的 coding 经验。因为 asp 我是仓促 之下学的,而且急着要用,所以我等同於一边找资料,一边写 程式,在工具有限的情况下,我至少知道要怎麽组合一些现有 的工具来达到我想要的结果。 例如说,假设圣殿没有 strcmp 函数,那麽要怎麽做字串比较 ?尤其是要比较的字串其长度又都不一定的情况呢? 1.先计算最长字串长度 2.针对长度不足的字串做补 "0", 例如 "laechan" -> "laechan0000" 3.再把字串套进特定的算式做处理 不过这个只能应急用,比方只比一下前几个字母这样。 (最好的方法还是自己写一个 strcmp, 只要参考 c or java 的 函式库写法即可) 就像我在圣殿常说的,很多系统其实都是简单工具的组合之下 的产物,它们其实并不难,重点是要懂得如何运用手边的工具 Laechan --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 223.140.164.51







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP