I have been trying to prepare either *.txt or *.csv files from Julia to be read by a VBA script. It appears that the files prepared by Julia NOT PUT a carriage return(CR) line feed(LF) at the end of each line. It seems VBA detects and end of file (EOF) upon the first line feed (see VBA script below). . Is there anyway to force a CRLF at the end of each row written by the Julia code? Hope someone can help on the Julia side… I could probably do a fiddle on the VBA side, but rather not for consistency.
using XLSX
using CSV
using DataFrames
using DelimitedFiles
using Parameters
matrix_out = zeros(10,3)
function foo()
a0=0
b0=20
c0=40
for i in 1:10
a=a0+i
b=b0+i
c=c0+i
matrix_out[i,:] = vcat(a,b,c)
end
df = DataFrame(matrix_out) # try a data DataFrame
CSV.write("input_VBA.csv", df, delim=',',decimal='.') # write csv file
open("input_VBA.txt", "w") do f # try a text file
writedlm(f,matrix_out,',')
end
println("Finished")
end
foo()
input_VBA.txt
1.0,21.0,41.0
2.0,22.0,42.0
3.0,23.0,43.0
4.0,24.0,44.0
5.0,25.0,45.0
6.0,26.0,46.0
7.0,27.0,47.0
8.0,28.0,48.0
9.0,29.0,49.0
10.0,30.0,50.0
My VBA script for reading the input_VBA.txt file.
Sub Read_Data()
Dim row_number, j As Integer
Dim FilePath_1 As Variant
Dim LineFromFile As Variant
Dim LineItems As Variant
FilePath_1 = "C:\Users\peter\Documents\Julia_Code\Greenhouse_Model\Green-Lights-main\input_VBA.txt"
row_number = 0
'Open the text file
Open FilePath_1 For Input As #1
' Line Input #1, LineFromFile ' read headings (only required for *.csv file
Do Until EOF(1) ' Loop until end of file.
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, ",") 'array dimensions starts from 0
For j = 0 To 2
Sheets("Sheet2").Cells(row_number + 1, j + 1).Value2 = LineItems(j)
Next j
row_number = row_number + 1
Loop
Close #1 ' Close file.
End Sub