Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Visual Basic for Applications/VBA Code to Read ASCII Log Data from LAS File

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Summary This page lists a VBA Sub procedure to read data from a LAS file. A LAS file is an industry-standard binary format for storing airborne LIDAR data. Sub procedure requirements: A LAS file must be located in the same folder where the macro-enabled Excel file is located The active worksheet must have in cell A1 the name of the LAS file VBA Code Sub ReadProperties() Dim numWords As Long Dim stringLine As String, fileName As String, lineStringVector() As String, headerStart As String Dim n As Long, i As Long, numLineHeader As Long, lenStringVector As Long, j As Long Dim colStart As Long, numProp As Long Dim rowStart As Long, rowNumCounter As Long, numDepths As Long Dim StartDatProp As Range, dataArray(1 To 10000, 1 To 20) As Double fileName = Cells(1, 1).Value Cells(1, 2).Value = "Num Prop:": Cells(1, 4).Value = "Num Depths" n = 0: rowStart = 2: colStart = 2: rowNumCounter = 1 Open fileName For Input As 1 Do While Not EOF(1) Line Input #1, stringLine headerStart = Left(stringLine, 2) ' stores in headerStart the first two characters of the string stringLine If headerStart = "~A" Then numLineHeader = n + 1 lineStringVector() = Split(Trim(stringLine), " ") lenStringVector = UBound(lineStringVector) - LBound(lineStringVector) + 1 numWords = 0: j = 1 For i = 0 To lenStringVector - 1 If lineStringVector(i) <> "" Then numWords = numWords + 1 Cells(rowStart, j).Value = lineStringVector(i) j = j + 1 End If Next i numProp = numWords - 1 Cells(1, 3).Value = numProp End If If numLineHeader > 0 And n >= numLineHeader Then lineStringVector() = Split(Trim(stringLine), " ") lenStringVector = UBound(lineStringVector) - LBound(lineStringVector) + 1 j = 0 For i = 0 To lenStringVector - 1 If lineStringVector(i) <> "" Then Cells(rowStart + rowNumCounter, colStart + j).Value = lineStringVector(i) dataArray(rowNumCounter, j + 1) = lineStringVector(i) j = j + 1 End If Next i rowNumCounter = rowNumCounter + 1 End If n = n + 1 Loop Close 1 numDepths = rowNumCounter - 1 Cells(1, 5).Value = numDepths Cells(rowStart, 2).Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.NumberFormat = "0.000" Cells(rowStart, 2).Select End Sub Example Data to Test You may create a ASCII file with extension LAS using the following example of data. Screenshot showing content of LAS file thumb|Screenshot showing data in LAS file Output on worksheet after running VBA Sub Screenshot showing Excel active worksheet after running VBA Sub thumb|Shows screenshot of Excel worksheet