VBA数据从txt解析为excel

时间:2015-06-30 16:58:04

标签: string excel vba parsing notepad

好的,我会尽力解释这个问题 - 我正在解析导入到excel的.txt文件 - 解析的.txt文件都有静态字段(有时) - 将来这些字段可能会改变,也可能不是静态的,因此下面的代码会解析相当粗糙的东西

问题:
1.假设将来这些字符串值可以改变(即" CUSTOMER NAME:"更改为DISTRIBUTOR NAME :) 一个。有没有办法我可以操作数据到我只需要建立字符串的名称,并跳过必须根据字符长度建立文本中的字符串的位置? (即不使用Mid(text,act + 6,9))

  1. 如果是这样,我该怎么做呢?文本文件中的某些行有1,2或3个字段(即SOME INDICATOR :, NO STATUS :,AUTO RENEW:..有三个字段值,而第一行有一个,第二行有两个。我猜一种方法这样做是为了建立字符串的名称,以便所述字符串和下一个字符串之间的每个字段都是字符串字段值,即:

    ACCOUNT OPEN:(string 1)    05/10/15(string 1 value)    ACT TYPE:(string 2) PREMIUM (string value 2) 
    
  2. 简而言之,我试图找到一种方法,使我可以使这个解析器“智能化”。可以这么说。虽然对于客户记录的第一部分使用以下方法没什么大不了的,但实际上每条记录都有额外的屏幕(大型机)。还有其他屏幕与库存,订单号等其他东西有关。所以你可以看到这可能会成为一项庞大而繁琐的工作。我不介意花几个月来绘制每个领域的地图,我认为这是必要的更多工作,所以任何输入都将非常感谢我如何做到这一点。

    1. 此外,我的下面代码无法完全运行。它正确导入了文本文件的第一个记录,但是重复了excel中其余行的精确记录(即帐户:ABCDEF12在excel中重复100行而不是记录列表。每个新记录从下面开始20行以前的)。我假设我的循环结构错了?有什么想法吗?有关如何使以下代码的自动调整部分更有效的任何想法?目前,我的代码需要花费多长时间来解析,修剪,清理和自动调整,以及如何缩短它的想法?

      Dim myFile As String
      Dim text As String
      Dim textline As String
      Dim cstAct as integer
      Dim actOpe as integer
      Dim cusNam as integer
      Dim act as integer
      Dim reg as integer
      
      myFile = "put file patch to text file here"
      myFile = Application.GetOpenFilename()
      
      Do Until EOF(1)
      Line Input #1, textline
      text = text & textline
      Loop
      
      cusAct = InStr(text, "ACCOUNT ")
      actOpe = InStr(text, "ACCOUNT OPEN:")
      reg = InStr(text, "REGION:")
      cusNam = InStr(text, "CUSTOMER NAME:")
      
      For i = 2 To ThisWorkbook.Worksheets("b2").Range("a65536").End(xlUp).Row
      ThisWorkbook.Worksheets("name").Range("a" & i).Value = Mid(text, act + 6, 9)
      ThisWorkbook.Worksheets("name").Range("b" & i).Value = Mid(text, cstAct + 6, 9)
      ThisWorkbook.Worksheets("name").Range("c" & i).Value = Mid(text, actOpe + 13, 27)
      ThisWorkbook.Worksheets("name").Range("d" & i).Value = Mid(text, cusNam  + 20, 19)
      
      next i
      
      'here I format and autofit the cells                         
      For x = 2 To ThisWorkbook.Worksheets("b2").Range("a65536").End(xlUp).Row
      Range("a" & x).Value = Application.WorksheetFunction.Clean(trim(Range("a" & x)))
      Range("b" & x).Value = Application.WorksheetFunction.Clean(trim(Range("b" & x)))
      Range("c" & x).Value = Application.WorksheetFunction.Clean(trim(Range("c" & x)))
      'etc etc
      next x
      
    2. '解析后导入到Excel中的文本文件

      ACCOUNT ABCDEF12                                                                 
      ACCOUNT OPEN:     05/10/15              ACT TYPE: PREMIUM          
      CUSTOMER NAME:    JOHN B. SMITH         CSA REP:  154983                   
      CUSTOMER ADDRESS: 123 SOMEWHERE DRIVE   SOMETHING HERE:                   
      LAST ORDER:       06/24/2011             COUNTRY CODE: UNITED STATES      
      INVOICE #:        123456789             STATE CODE:    CALIFORNIA         
      LAST MAINTENANCE: 01/02/15               COUNTY CODE:  UNCODED            
      SOME INDICATOR:   NO   COMPLAINTS: NO   IPM IND:       DATAPREP/PERF4     
      SOME INDICATOR:   NO STATUS:  NONE      AUTO RENEW:    YES                
      SOMETHING HERE:   NO                             
      SOMETHING HERE:          ABC IND:       
      SOMETHING HERE:   2    ABC ASSET NO:  T                                           
      

      .......留下TXT文件重复...只是不同的记录......

      ACCOUNT ZXYFDG13                                                                 
      ACCOUNT OPEN:     05/10/15              ACT TYPE: PREMIUM          
      CUSTOMER NAME:    JANE B. SMITH         CSA REP:  154983                   
      CUSTOMER ADDRESS: 123 SOMEWHERE DRIVE   SOMETHING HERE:                   
      LAST ORDER:       06/24/2011             COUNTRY CODE: UNITED STATES      
      INVOICE #:        123456789             STATE CODE:    CALIFORNIA         
      LAST MAINTENANCE: 01/02/15               COUNTY CODE:  UNCODED            
      SOME INDICATOR:   NO   COMPLAINTS: NO   IPM IND:       DATAPREP/PERF4     
      SOME INDICATOR:   NO STATUS:  NONE      AUTO RENEW:    YES                
      SOMETHING HERE:   NO                             
      SOMETHING HERE:          ABC IND:  NO     
      SOMETHING HERE:   2    REGION:  NE                       
      

      .....记录无限期地继续.........

0 个答案:

没有答案