永发信息网

懂NetTerm(门店管理系统)的来下,高分悬赏

答案:1  悬赏:0  手机版
解决时间 2021-05-02 17:15

我在一家超市做EDP,每天晚上日结后最麻烦的工作就是从NetTerm里复制数据,太浪费了我的下班时间了,谁知道有什么更好的方法从netterm里复制数据吗?比如 全选 快捷键之类的。说的更清楚点,打个比方,有一个子分类是:清洁用品,可想而知,有多少个商品的销售记录啊,我得把这些销售记录全部复制到EXCEL中去。

求更好的方法,或者关于netterm的一切实用方法

最佳答案
相信很多人的工作环境是兼用windows和unix的,典型的情境是在win2k下用一个终端软件来
登录一台Unix主机,或是本地虚拟机里跑的unix。这种环境下,把windows剪贴板里的内容
复制到终端里不成问题,但反过来就麻烦了: 如何把终端里的内容复制到windows剪贴板里?
当然,典型的终端支持鼠标在上面选取,复制。但这是作为一个windows应用程序的终端程序
与windows OS之间的接口,而且这样的用法还有诸多限制:(1)终端的缓冲区大小限制(2)复制
时需要滚动,而Netterm还不支持鼠标滚轮滚动。这样就显得更不方便了。

有华人居住的地方就有金庸小说,有unix的地方就有vi. 有vi的地方你用ls -l一看, 原来是
一个链接指向了vim.

如何在vim 操作窗口中随心所欲地把文本内容复制到剪贴板里呢?
先看看vim 所提供的对文本的操作功能:
(1)指定两个行之间的内容, 可以写入/追加到一个文件。写入/追加到26个内部寄存器中(这
26个内部寄存器是以字母a-z 命名的, 大写表示追加。另外vim中的特殊寄存器*"/%: 等与本文
讨论无关,不说
例子:
将10-100行的内容强制写入文件tmp.txt, 如果该文件存在则覆盖之:

[Copy to clipboard] [ - ]CODE: :10,100w! tmp.txt
将所有包含BEGIN的行到包含END的行之间的内容追加到寄存器 v 中:

[Copy to clipboard] [ - ]CODE: :g/BEGIN/;/END/y V
(2)任何一个区块之间的内容,可以写入/追加到一个文件/寄存器。这个区块可以是起始或结束
于一行的任意位置,也可以是一个矩形块(ultraEdit或word里也可以进行的那种列选择)
被操作的文本对象可以以一种可视模式进行选择,调整好文本对象的范围后,再进行操作

如何将一行文本复制到剪贴板中,先看看基本的,终端下的操作
方法一:
SecureNetterm(5.4.3.1) 提供了一个Special escape sequence:

[Copy to clipboard] [ - ]CODE: ^[[]TEXT^[[11*
它可以把TEXT处的内容复制到windows剪贴板中。其中^[是一个字符:ESCAPE字符,ASCII为27。
可以这样试一下:

[Copy to clipboard] [ - ]CODE: echo -ne "\e[]hello, world\e[11*"
这在终端上不会显示任何东西, 但是hello, world这个字串已经跑到剪贴板里去了
它的缺点是
o TEXT的最大长度为2048
o 不能复制多行文本
cat tmp.txt

[Copy to clipboard] [ - ]CODE: 1
2
3
比如echo -ne "\e[]"; cat tmp.txt; echo -ne "\e[11*"
剪贴板里的内容是123,而不是3行
方法二:
Netterm的安装目录里有几个C源文件:neted.c netedit.c netsend.c
这些文件都不大,在unix上编译后你可以用它来操作一个unix主机上
的文件,而所用的编辑器是windows上的notepad. 它们是怎么实现的呢。其基本
原理是: 用zmodem或其它协议将unix主机上的文件传至windows主机,然后发送
一个Special Escape Sequence给终端,你的windows终端软件会截获这个特殊序列。
根据这个特殊序列执行相应的操作,如neted.c中发送 "\033[6i" 表示让终端启动
一个本地的编辑器来打开指定文件。这个具体的编辑器可以在Netterm软件中配置。
编辑完毕退出时,再用同样的协议把文件从windows主机上下载下来更新。

注意:
这些终端软件的Special Escape Sequence, 并不是shell或tty或任何你想到的Unix
下标准的或很通用的一部分。同样的Special Escape Sequence, 你在一个unix的本
地登录终端中使用就不是这个作用。这些Sequence的选择必需是用户几乎不可能用到
的键的序列。这是终端软件Netterm自己的附加值部分。

这些键序列中比较有用的一个是 ^[[]command^[[1* , 它可以运行一个由command指定
的,windows主机中%PATH%环境变量所能访问到的一个命令。有了这个,我们就可以从
上面的机制中取出有用的部分:文件传输。如用sz -b filename命令把文件传至windows
主机下。然后执行一个命令来把这个文件的内容放到剪贴板中。这样的小工具很多。
windows的resource kit中也提供了一个, 叫clip.exe,可以读取标准输入的内容,然后
复制到windows剪贴板中。如clip.exe < filename.txt. 我所试用的是下载自

[Copy to clipboard] [ - ]CODE: http://www.dmst.aueb.gr/dds/sw/outwit/
的winclip, 它的功能几乎跟clip.exe 一样。 用法是 winclip -c filename.txt
下面的一个shell脚本把文件 ~/tmp.txt 复制到剪贴中:

[Copy to clipboard] [ - ]CODE: #!/bin/sh
sz -y ~/tmp.txt #将文件~/tmp.txt 传至windows主机,默认路径是C:\. 可以在终端软件中配置
#参数-y 会覆盖已经存在的文件
echo -ne "\e[]doit.bat tmp.txt\e[1*"
其中doit.bat是一个windows下的批处理文件:

[Copy to clipboard] [ - ]CODE: @rem 如果文件不存在,直接退出
if ! exist C:\%1% goto exit
@winclip.exe -c C:\%1%
@del C:\%1%
:exit
命令前面加的@可以禁止命令本身被echo 出来

恼人的一点是sz 运行的时候会弹出一个窗口表示进度。另外用上面的特殊键序来运行一个
windows主机的命令时,会有一个一闪而过的cmd窗口。后面我们有对策。

绕过sz的一个绝好的东西是samba. 我这里不再说samba的详细配置了,总之你共享出一个
C:\下的目录,然后在unix中主机中建一个目录,把它mount上,这样你可以直接用cp 命令
来把文件传至windows主机。而且不着痕迹。不象sz那么讨厌。
友情提示:
普通用户不能执行smbmount,chmod u+s /usr/bin/smbmount之后也不行,这是因为smbmount
实际上是一个wrapper, 真正干活的是/usr/bin/smbmnt. chmod u+s /usr/bin/smbmnt之后
普通用户就可以mount了

最后的步骤是配置我们的vi(你可以配置你的emacs做同样的事)
.vimrc

[Copy to clipboard] [ - ]CODE: nnoremap g<C-I>; :silent redir! >; ~/.secureNetterm/clipboard.txt<Bar>;silent echo @v<Bar>;silent redir END<Bar>;silent !echo -ne "\e[]winclip.exe -c C:\\SecureNetterm\\clipboard.txt\e[1*"<CR>;<C-L>;
这一行定义了vim中的一个映射,看着头痛没关系,我来授之以渔
nnoremap :定义一个normal模式下的map, 其中nore 意思是不要递归的这么map下去。
g<C-I>; 按下字母g后按Control-I
:silent 可以让后面的命令不输出到终端上
redir! >; ~/.secureNetterm/clipboard.txt 指定重定向到这个文件里。 其中这个目录
.secureNetterm 就是mount后的windows上的目录。!会覆盖原来存在的文件
<Bar>; 一个用在VIM里键映射定义语句中的特殊键的描述符,表示多个命令一个接一个地
执行
echo @v 这是保存要复制的东西的寄存器, silent echo @v的效果既是不显示,但又能重定向
到文件中去。
redir END 是结束重定向
!echo -ne "\e[]winclip.exe -c C:\\SecureNetterm\\clipboard.txt\e[1*" 既是前面分析过的调用windows主机上命令的特殊代码序列

咕咚咕咚.....
刚才说的有个问题是执行的时候会有一个一闪而过的DOS窗口。 这可以用一个包裹程序把它
给遮掩起来:
==============

[Copy to clipboard] [ - ]CODE: #include <windows.h>;

int WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd)
{
ShellExecute(NULL, "open", "C:\\dos\\winclip.exe",
"-c C:\\secureNetterm\\clipboard.txt",
"", SW_HIDE);
return 0;
}
==============
关键之处就是那个 SW_HIDE.
假如这个程序名为blindClip.exe. 前面的Special escape sequence就可以改为
!echo -ne "\e[]blindClip.exe\e[1*"
遗憾在哪?
存出来的文件是unix格式的, 当然可以用unix2dos或vim自己的方法来把它转成dos格式的
但各种解决方法都不能令我满意。不过对我来说,我在windows下的文本编辑器也是VIM,它
里面COPY/PASTE各种不同平台的文本格式都没有问题。 你要是在记事本里PASTE就不行了。
在word或wordpad里面没问题。

最后再总结一下步骤:
(1)你需要有一个支持上述功能的终端
(2)需要向.vimrc中加入上面的map
(3)windows需要共享出来一个文件夹
(4)linux需要配置好samba并把windows共享出来的文件夹mount上
(5)需要下载一个winclip.exe 来把文件的内容COPY到剪贴板里
(6)如果你忍受不了那个一闪一闪的窗口,把我上面的几行代码编成一个程序。里面的文件名
路径名什么的大家就请心领神会了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
跑跑专业级驾照详解?
生化系列哪些可以在电脑上运行?
梦见自己的手机屏裂纹了帮我解解。
请鉴定此器物的名称及年代
不想吃东西很懒散
在淘宝购买8位数QQ可靠吗?
iPhone2代冲不进电
QQ自由幻想新年快乐礼包,求
手机游戏《魔界》共有多少人玩?
保定永汇建筑工程有限公司怎么去啊,有知道地
他老是感冒
诺基亚5230连接电脑
有个国外公司的服务费用每年要外汇付款支付中
删除了聊天记录,怎么样才能找回来
日本药妆野城医生的绿色胜肽效果怎么样
推荐资讯
颐和碳锅我想知道这个在什么地方
无聊时干嘛。?
DNF封一年的号怎样才能提前解封?
剑魂0000000
牵网线的祥细流程
我家SAI怎么画着画着就用不了sai格式保存了?
网球能吃么?!
鬼眼狂刀片头曲和片尾曲
三千左右笔记本,性能好点的,上网,玩个网游
辜负了别人的句子,有一种感情是朋友辜负了你
接种甲流疫苗要多长时间才能吃海鲜
大学专业初等教育学什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?