谢谢:我做一个盘点机的程序,现在需要给盘点机导入数据,导入文件为定格式的文本文件,
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

解决方案 »

  1.   

    print之后就不要加chr(13) &chr(10)了,系统会自动加上的,在读取得时候使用line input读取一行,然后按格式拆分各项就可以了。
      

  2.   

    谢谢eaglezhao(笨小子) :不要chr(13) &chr(10) ,我试过
    结果出来是正确的,但是我传到盘点机中却不行了,
    我想是用 Print # 的原因
    如何用Write # 达到呢?
      

  3.   

    print #id,记录号,对象
    利用它可以写入二进制文件,例如可以定义体格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
      

  4.   

     期待~~~~~~~~~~~~~~~~~~help~~~~~~~~~~  
     
      

  5.   

    Print #1,"一模一样"
    Write #1,"一模一样"文本中的效果为:一模一样
    "一模一样"
      

  6.   

    正如xxlroad(土八路)所说,使用write语句后在notepad中打开无非多看到一些引号罢了,其他功能一样,不知道你在盘点机中出什么错?
      

  7.   

    在 Binary、Input 和 Random 方式下可以用不同的文件号打开同一文件,而不必先将该文件关闭。在 Append 和 Output 方式下,如果要用不同的文件号打开同一文件,则必须在打开文件之前先关闭该文件。 
      

  8.   

    对于Print和Write之间的区别,xxlroad(土八路)说得不错。
    但我觉得如果盘点机接收的数据格式不限制为上面的格式,即接收数据程序是你自己设计的,可以换一种格式来处理的话,用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
    多看看函数说明
      

  9.   

    一定要用write的话,读取时要去掉两端的括号
      

  10.   

    谢谢各位:
      原因我找到了,是格式的问题。要求格式为
    条码 + 货号  + 价格  + 名称  +  数量 + 回车换行 
      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 
      各位大师有何办法处理定格式的情况, 关键是如何处理字符串中汉字占两个字节的问题
      

  11.   

    len(StrConv("abc你好",vbUnicode ))-len(strconv("abc你好",vbFromUnicode ))
      

  12.   

    songyangk(小草): 谢谢。
     能否讲清楚点。我试了一些如下
            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
    哪个"决定速焗王"中间空的就是那个(火+局) 我用智能打不出来,也复制不了 
    从上面的值看出,好象这没什么作用一样。恳请指点,谢谢。
      

  13.   

    "决定速焗王"我看出来,发布上csdn上却有的,看来是输入法有问题。
    其实,在vb中,汉字占两个字节,其它的却占一个字节,处理定长字符时这是一个经常碰到的问题,请帮忙指点一下,up一下也好,谢谢
      

  14.   

    给个函数你试试Public Function LimitStringLength(ByVal sStr As String, iLength As Integer) As String
       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
      

  15.   

    heng_s(渣渣): 谢谢你!
       希望能够认识你.以后还请多多指教。
      

  16.   

    帮我看看:
    http://www.csdn.net/expert/topic/366/366848.shtm
    http://www.csdn.net/expert/topic/368/368582.shtm
    谢谢
      

  17.   

    先定义一个结构为好
    用put写
    get读
    详细语法查msdn
      

  18.   

    "Print # 里面写出来的在另外的程序中读不了"不对吧,用line input不就得到了?
    Write # 在项目中有 " ",可以用字符串转换函数将其去掉