谢谢:我做一个盘点机的程序,现在需要给盘点机导入数据,导入文件为定格式的文本文件,
69155660085651111113.90 鲜橙汁 2123.00
97710061860052222229.10 哥伦比亚咖啡 4565.00
490178021395533333321.10 麦氏咖啡 4454.00 条码 + 货号 + 价格 + 名称 + 数量 + 回车换行
13 + 6 + 7 + 20 + 7 + 2 共 55 位主要代码如下:(Rstemp 为一记录集)
Open CommonDialog2.FileName For Output As #2
While Not RsTemp.EOF
Print #2, Left(RsTemp.Fields(0) & Space(13), 13); _
Left(RsTemp.Fields(1) & Space(6), 6); _
Left(RsTemp.Fields(2) & Space(7), 7); _
Left(RsTemp.Fields(3) & Space(10), 10); _
Space(7); _
Chr(13) ' & Chr(10)
RsTemp.MoveNext
Wend
Close #2
69155660085651111113.90 鲜橙汁 2123.00
97710061860052222229.10 哥伦比亚咖啡 4565.00
490178021395533333321.10 麦氏咖啡 4454.00 条码 + 货号 + 价格 + 名称 + 数量 + 回车换行
13 + 6 + 7 + 20 + 7 + 2 共 55 位主要代码如下:(Rstemp 为一记录集)
Open CommonDialog2.FileName For Output As #2
While Not RsTemp.EOF
Print #2, Left(RsTemp.Fields(0) & Space(13), 13); _
Left(RsTemp.Fields(1) & Space(6), 6); _
Left(RsTemp.Fields(2) & Space(7), 7); _
Left(RsTemp.Fields(3) & Space(10), 10); _
Space(7); _
Chr(13) ' & Chr(10)
RsTemp.MoveNext
Wend
Close #2
解决方案 »
- 无法链接局域网内的SQL数据库!
- vb 中写 unicode ini 配置文件的问题,高手帮帮忙啊。
- MSHFlexGrid 如何保持先前的排序?
- 麻烦各位高手把以这么点点VC代码转换成VB的,谢了,马上结分
- 如何判断EXCEL中含有多少个SHEET?如何将excel中原有的SHEET全部删除,只保留新增的一个SHEET?
- 有关数据集枚举的问题,挺简单的
- 求图片,最好抽象朦胧的
- ~~~~~一个很简单的问题,但是我就是没有看到效果,请各位帮忙看看。马上给分!~~~~
- ★急■■怎样用程序实现利用鼠标获取网页里面的文本框的句柄??? ■
- VB:Winsock控件的使用问题
- 有誰知道*.MDF文件,是什么系統的數據文件嗎?
- 大家都帮我看看,我猜测是用递归,但没有头绪,一写就写不下去了!!
结果出来是正确的,但是我传到盘点机中却不行了,
我想是用 Print # 的原因
如何用Write # 达到呢?
利用它可以写入二进制文件,例如可以定义体格Type,然后将其写入
private Type stt
ss as string
ii as integer
end type
....
dim ss as stt
ss.ss="kkkk"
ss.ii=90
print #id,1,ss取出:
dim ss as stt
get #id,1,ss
msgbox ss.ss & " " & ss.ii
Write #1,"一模一样"文本中的效果为:一模一样
"一模一样"
但我觉得如果盘点机接收的数据格式不限制为上面的格式,即接收数据程序是你自己设计的,可以换一种格式来处理的话,用lishush(☆↑苯鸟先飞↑☆)所说的方法更好一些。
可以把数据定义成一个结构体,再用put命令写到二进制方法打开的文件中,读取时用get命令读出。
private type MyType
tm as long
hh as long
jg as current'可能记错,货币型
name as string * 10
sl as long
end type
private sub It()
dim xx as MyType
xx.name="麦氏咖啡"
'...以二进制方式打开文件,给xx赋值(略)
put #1,,xx '写入文件
get #1,,xx '读出文件
'可以用seek命令定位读写指定记录,或直接用put/get #1,n,xx在n处写入/读出一个MyType型值
end sub
多看看函数说明
原因我找到了,是格式的问题。要求格式为
条码 + 货号 + 价格 + 名称 + 数量 + 回车换行
13 + 6 + 7 + 20 + 7 + 2 共 55 位
不满的用空格补充。
我是这么处理的: RsTemp.MoveFirst
While Not RsTemp.EOF
Length = Len(RsTemp.Fields(3))
ReDim strtmp(Length - 1)
Str_Len = 0
M00105 = ""
For i = 0 To Length - 1
strtmp(i) = Mid(RsTemp.Fields(3), i + 1, 1)
If Str_Len >= 19 Then
Exit For
Else
M00105 = M00105 & strtmp(i)
End If
If Asc(strtmp(i)) And &H80 Then '与操作,判断是否是汉字
Str_Len = Str_Len + 2 '汉字占2位
Else
Str_Len = Str_Len + 1
End If
Next
Print #2, Left(RsTemp.Fields(0) & Space(13), 13); _
Left(RsTemp.Fields(1) & Space(6), 6); _
Left(RsTemp.Fields(2) & Space(7), 7); _
M00105 & Space(20 - Str_Len); _
"1234567"
RsTemp.MoveNext
但现在碰到一些字符如 (火+局) 一个字我用智能打不出来,只好 :_)时,Str_Len 却赋值为 str_Len+1
各位大师有何办法处理定格式的情况, 关键是如何处理字符串中汉字占两个字节的问题
能否讲清楚点。我试了一些如下
Debug.Print "1 " & Len(StrConv("abc你好", vbUnicode))
Debug.Print "2 " & Len(StrConv("abc你好", vbFromUnicode))
Debug.Print "3 " & Len(StrConv("abda你好焗好111", vbFromUnicode))
Debug.Print "4 " & Len(StrConv("abda你好焗好111", vbUnicode))
Debug.Print "5 " & Len(StrConv("你好", vbFromUnicode))
Debug.Print "6 " & Len(StrConv("你好", vbUnicode))
Debug.Print "7 " & Len(StrConv("12545asfas", vbFromUnicode))
Debug.Print "8 " & Len(StrConv("12545asfas", vbUnicode))
Debug.Print "9 " & Len(StrConv("决定速焗王", vbFromUnicode))
Debug.Print "10 " & Len(StrConv("决定速焗王", vbUnicode))
结果如下
1 10
2 3
3 7
4 22
5 2
6 4
7 5
8 20
9 5
10 6
哪个"决定速焗王"中间空的就是那个(火+局) 我用智能打不出来,也复制不了
从上面的值看出,好象这没什么作用一样。恳请指点,谢谢。
其实,在vb中,汉字占两个字节,其它的却占一个字节,处理定长字符时这是一个经常碰到的问题,请帮忙指点一下,up一下也好,谢谢
Dim I As Integer
sStr = StrConv(sStr, vbFromUnicode)
I = LenB(sStr)
If I > iLength Then
sStr = LeftB(sStr, iLength)
End If
sStr = StrConv(sStr, vbUnicode)
If I < iLength Then
sStr = sStr & Space(iLength - I)
End If
LimitStringLength = sStr
End Function
希望能够认识你.以后还请多多指教。
http://www.csdn.net/expert/topic/366/366848.shtm
http://www.csdn.net/expert/topic/368/368582.shtm
谢谢
用put写
get读
详细语法查msdn
Write # 在项目中有 " ",可以用字符串转换函数将其去掉