中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-30 23:05
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 不知道是否有将系统8位日期赋值为变量,再有支持通配符? 查看 1,196 回复 7
楼 主 不知道是否有将系统8位日期赋值为变量,再有支持通配符? 发表于 2006-11-26 04:25 ·  中国 陕西 汉中 城固县 电信
初级用户
积分 88
发帖 33
注册 2006-11-17 19:34
19年会员
UID 70832
性别 男
状态 离线
不知道是否有将系统8位日期赋值为变量,再有支持通配符?的小巧软件替换原文本中的指定行的旧日期字符串,这样的小巧实用的MS-DOS软件工具?

VARSET不可靠,Xset的日期变量只能六位mm/dd/yy,hexc不支持空格和通配符,change不支持通配符。

都是遍历替换,无指定行替换。
2 发表于 2006-11-26 19:54 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  楼主可否说得详细一点?最好是举个例子。。
3 比如: 发表于 2006-11-27 05:15 ·  中国 陕西 汉中 电信
初级用户
积分 88
发帖 33
注册 2006-11-17 19:34
19年会员
UID 70832
性别 男
状态 离线
比如:将“2006年11月26日”或“2006-11-26”赋值为变量 myvar
再将myvar替换一直文本中的末尾行的左起第16个字符开始的8位旧日期yyyy-mm-dd,这个旧日期事先可能不知道,故需通配符????-??-??来代替它识别字符串。

目前的varset、xset、hexc、change都不能满足。

[ Last edited by mws632 on 2006-11-26 at 04:17 PM ]
4 发表于 2006-11-27 06:48 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
“……末尾行的左起第16个字符开始的……” 也就是说这个文件中8位旧日期的前后左右全都有内容,而且还不是固定的,这本身就有了很大的难度。
(而且,就是Windows CMD Shell上操作都有一部分难度,更何况是纯DOS)

我不知道这个含有旧日期的文件是程序建立的还是如何建立的?


如果在这种不固定的情况下(为了代码操作上的上便),如果上面含有旧日期的文件可以由楼主控置其内容与格式的生成的话,
则代码二次处理这个含旧日期的文件则比较方便。

这可能也是那些工具操作起来麻烦的地方吧~:)
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
5 发表于 2006-11-28 04:50 ·  中国 上海 静安区 电信
初级用户
★★
积分 148
发帖 69
注册 2006-11-23 23:04
19年会员
UID 71504
性别 男
状态 离线
没看明白什么意思,学习
6 其实很简单,也许我没表达清楚: 发表于 2006-11-28 18:49 ·  中国 陕西 汉中 电信
初级用户
积分 88
发帖 33
注册 2006-11-17 19:34
19年会员
UID 70832
性别 男
状态 离线
我在启动软盘中已有一文本文件A.TXT,可用read软件来读的,我想实现每次启动完成再读此篇A.TXT时,文尾的落款日期已自动变成当前日期。

此A.TXT的落款日期“yyyy-mm-dd”随系统日期改变,但落款日期的左右的字符串是固定不变的。

比如:

2006.11.28. 于四川省成都市

仅需改变此行中的日期即可。
7 发表于 2006-11-28 23:32 ·  中国 北京 联通
金牌会员
★★★★
积分 2,902
发帖 1,147
注册 2006-09-21 12:00
19年会员
UID 63324
性别 男
状态 离线
想了几种方法:

) C语言直接编程来直接写你那个要更改日期的 A.TXT 文件中的指定内容,以达到更新,但我菜鸟一个,不会编~:)


  例如: SETDATA.EXE 21 16 2006-11-28 A.TXT
      SETDATA.EXE 21 16 %MYDATE% A.TXT
  

      以覆盖方式将(x,y座标)新的日期内容写入 A.TXT 文件的(第21行的偏移量从0起的第16个开始的字符处)



  不过,上面的运行于 MS-DOS 下的工具只是我凭空想像应该这样完成一件工作。

  然我没有见到过有人编写过这样的工具(或许存在这样的工具但没有被我们知道),所以上面的理想的方法无法完成:)


) 我也曾希望 MS-DOS 下有这样的工具:


  例如: GETDATA.EXE 21 16 10 %VAR% A.TXT
      GETDATA.EXE 21 16 %getNum% %VAR% A.TXT
      GETDATA.EXE 21 16 10+     %VAR% A.TXT
      以只读方式读取 A.TXT 中的指定位置:(x,y-第21行的从偏移量0起的第16个字符处)连读10个字符。
      或,取多少个字符由变量 %getNum% 指定。
      或,取多少个字符: 10+ 代表右取到行尾
      或,取多少个字符: -10 代表从此位置向左取到行首
      
      将取出的字符串赋值给变量 %VAR%,将来就可以 echo %var% 等方式调用。


  以上只是个人想法,但我不会编写无法实现~:)
 

) 另一种解决方法:

  MS-DOS 下直接使用反汇编工具 Debug 来精确定位你指定的文件 A.TXT 中的第多少个字节处开始(以覆盖方式)写入你指定的内容。
  间接达到(替换操作)的要求。被替换字符串应与替换字符串等长。
  
  实现上面想法理论上可以实现。

) 取系统当前日期:

  理论上 Debug 或是 生成临时文件的方式同样可以实现。
  然后将得到的 %MYDATE% 变量,再使用存有当前日期的 %MYDATE% 变量通过 Debug 来精确写 A.TXT 文件。


) 但是,上面方法走弯路了。

  简单的方法应该是通过一些技巧取到系统日期赋入 %MYDATE% 变量中,
  至于你要显示随时被更改过的那个 A.TXT 文件,可以如下操作:

  ECHO .......
  ECHO .................. 第 n 行了...............
  ECHO %MYDATE% 于四川省成都市 ................
  ECHO .......

  即,你那个要随时更动日期的文件内容直接写成批处理可以直接调用的形式 A.BAT
  这样只要一调用 CALL A.BAT 文件,自然就显示了内容又%MYDATE%可以实时替换。
    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
8 思路都好 发表于 2006-12-02 19:48 ·  中国 陕西 汉中 电信
初级用户
积分 88
发帖 33
注册 2006-11-17 19:34
19年会员
UID 70832
性别 男
状态 离线
论坛跳转: