estoy usando una macro para generar un código. Tengo esto para imprimirlo en un archivo .vhdl
While iloop_line <= nblines If MySheet.Cells(iloop_line, Type_Column) = Type_Register Then nbRegister= nbRegister+ 1 reg_addr = Mid(MySheet.Cells(iloop_line, Low_ADDR_Column), 1, 6) Print #my_file_id, " constant " & LCase(MySheet.Cells(iloop_line, Name_Column)) & "_addr : std_logic_vector(" & AddrWidthTocomp - 1 & " downto 0) := X""" & reg_addr & """;" reg_data = Replace(Mid(MySheet.Cells(iloop_line, Default_Value_Column), 3, 8), "_", "") Print #my_file_id, " constant " & LCase(MySheet.Cells(iloop_ligne, Name_Column)) & "_val : std_logic_vector(" & AddrWidthTocomp - 1 & " downto 0) := X""" & reg_data & """;" Print #my_file_id, "" End If iloop_line = iloop_line + 1 WendY tengo esto en el resultado:
constant reg_test12345_addr : std_logic_vector(23 downto 0) := X"000000"; constant reg_test12345_val : std_logic_vector(23 downto 0) := X"000000"; constant reg_123456789_addr : std_logic_vector(23 downto 0) := X"0000FF"; constant reg_123456789_val : std_logic_vector(23 downto 0) := X"000000"; constant reg_1234567891234567_addr : std_logic_vector(23 downto 0) := X"000100"; constant reg_reg_1234567891234567_val : std_logic_vector(23 downto 0) := X"000000";Y para hacerlo más limpio quiero esto:
constant reg_test12345_addr : std_logic_vector(23 downto 0) := X"000000"; constant reg_test12345_val : std_logic_vector(23 downto 0) := X"000000"; constant reg_123456789_addr : std_logic_vector(23 downto 0) := X"0000FF"; constant reg_123456789_val : std_logic_vector(23 downto 0) := X"000000"; constant reg_1234567891234567_addr : std_logic_vector(23 downto 0) := X"000100"; constant reg_reg_1234567891234567_val : std_logic_vector(23 downto 0) := X"000000";¿Tienes alguna idea para hacer esto?
Como ejemplo, inserté varias longitudes de cadena en Sheet1!B1:B20 usando =REPT("a",RANDBETWEEN(1,20)) .
Sub Test() Dim MySheet As Worksheet Set MySheet = ThisWorkbook.Worksheets("Sheet1") Dim Name_Column As Long Name_Column = 2 Dim iloop_line As Long Dim StringValue As String For iloop_line = 1 To 20 StringValue = LCase(MySheet.Cells(iloop_line, Name_Column)) Debug.Print StringValue & "_addr" & Space(30 - Len(StringValue & "_addr")) & ": std_logic_vector" Debug.Print StringValue & "_val" & Space(30 - Len(StringValue & "_val")) & ": std_logic_vector" Next iloop_line End Sub El código anterior me dio el siguiente resultado: el : es siempre el carácter 31.
aaaaaaaaaaa_addr : std_logic_vector aaaaaaaaaaa_val : std_logic_vector aaaaaaaaaaaa_addr : std_logic_vector aaaaaaaaaaaa_val : std_logic_vector aaaaaaaaaa_addr : std_logic_vector aaaaaaaaaa_val : std_logic_vector aaaaaaaaaa_addr : std_logic_vector aaaaaaaaaa_val : std_logic_vector Editar: Bueno, eso es vergonzoso, nunca supe sobre el comando SPACE en VBA. Tenga un código actualizado para usar eso en lugar de REPT . Piensa que la última vez que usé eso podría haber sido con Sinclair BASIC.
Otro enfoque es utilizar una cadena de longitud fija.
Dim fixedString As String * 30 fixedString = "abc" Debug.Print fixedString & ": " & 1 fixedString = "something longer" Debug.Print fixedString & ": " & 2 'abc : 1 'something longer : 2