사실 파일 변환기 도구를 쓰고 있습니다. 데이터 값은 120x120 행렬을 나타냅니다. 내 첫 번째 생각은 두 개의 중첩 된 루프와 첫 번째 내부의 새로운 라인이었습니다. 쉽습니다.CSV 데이터 파일의 매트릭스와 같은 값 구성
입력 파일에는 각 값에 대해 vbNewLine이 있습니다. 입력 파일을 문자열 strAll
으로 구문 분석했습니다.
입력 strAll 포함
10 문자 길이 값
" -24.1189" (two blanks before value)
" 1.2345" (four blanks before value)
쉬워야 Mid
모자를 사용
-24.1189;-24.1189; (...total 120 values...)
-24.1234;-24.1189; (...total 120 values...)
(... total 120 rows ...)
파싱 출력 : Mid(strAll, 1+i, 10+i)
, i
카운터 인 안에 for 루프. Replace(stAll, " ", "")
은 3 개의 공백, 2 개의 공백 및 1 개의 공백을 모두 제거해야합니다.
질문 : 문자열을 파일로 출력하는 방법은 매트릭스 형식입니까?
Dim intValueLength, maxValue, intValueInRowMax
intValueLength=10
intValueInRowMax=120
maxValues=intValueInRowMax * intValueInRowMax
Sub Strg2Array
arrAll = array()
' convert to array
For i=1 To maxValues
ReDim Preserve arrAll(UBound(arrAll) +1)
arrAll(UBound(arrAll)) = Mid(strAll, 1+(i-1)*intValueLength, i*intValueLength)
Next
End Sub
Sub SaveAll
Dim intValueInRow
intValueInRow=0
Const ForWriting = 2
Set objFSOOut = CreateObject("Scripting.FileSystemObject")
Set objOutput = objFSOOut.OpenTextFile(strFileName, ForWriting, true)
for each value in arrAll
objOutput.Write value
intValueInRow = intValueInRow + 1 'Argh, there is no "++" operator?
If (intValueInRow = intValueInRowMax) Then
objOutput.Write vbNewLine
intValueInRow=0
End If
next
objOutput.Close
Set objFSOOutput = Nothing
End Sub
표준 텍스트 파일 (후행 EOL)의 경우 "분할"전략은 결과 배열에 빈/가짜 마지막 요소를 만듭니다. –
네가 맞다. 이것은 오타이다. 내 독일어 함수 이름을 번역해야했다. 모듈러스 작업에 감사드립니다. 좋은 오래된 C++ % -Modulo처럼 들립니다. –
@ Ekkehard.Horner 예, 언급 했어야합니다. 결정된. –