使用 Azure 函数迭代 Blob 存储中的文本文件

Posted

技术标签:

【中文标题】使用 Azure 函数迭代 Blob 存储中的文本文件【英文标题】:Iterating through text files in blob storage, using Azure functions 【发布时间】:2022-01-12 20:31:03 【问题描述】:

这里是 Azure 的新手。我最近接管了一个项目的大修,其中使用 Visual Basic 提取非结构化文本文件中的数据并将其插入到数据库表中。

长话短说,这个 VB 脚本有很多问题,所以我正在使用 Powershell 重写它。它不是很复杂,基本上只是逐行检查文件并使用不同的开始和停止信息提取数据,下面是一个小例子:

$fileName = ""
$fileContents = ""
$filePath = Get-ChildItem -Path C:\share\Batch -Exclude csv

for ($i = 0; $i -lt $filePath.Count; $i++) 
    $fileName = $filePath[$i].Name
    $fileContents = Get-Content $filePath[$i].FullName
    
    getTempLog $fileContents
    getAiringLog $fileContents
    getSteamLog $fileContents
    getProductionSummary $fileContents


function getTempLog 
    param ($fileContents)

        $tempLogStart = 0

        $fileContents | foreach-object 
         # end condition
        if ([int]$TempLogStart -eq 1 -and $_ -like "Genomluftning Flöde (m3/h) log:*") 
            break
        

        #output tempLog data
        if ([int]$TempLogStart -eq 1) 
            Write-Host $_.Substring(0, 14) #this should go into database
            Write-Host $_.Substring(24, 4)
        

        # start condition
        if ($_ -like "Temperature log:*") 
            $TempLogStart = 1
        
    
    

当然,当决定将此解决方案移至云中并将文件上传到 Azure Blob 存储时,事情变得更加复杂。

使用 Blob 存储作为输入创建 Azure 函数并不是什么大问题,但尝试以与我在本地文件时相同的方式读取 Blob,即

$inputBlob | foreach-object 


效果不佳,因为似乎 blob 输入变量被视为一个长连续字符串。我是不是完全走错了路?

【问题讨论】:

如何初始化$inputBlob?在您的代码中,$fileContents 包含一个文本行数组,因为 Get-Content 将文件内容解析为单独的文本行。您可能需要对您的 blob 内容执行相同的操作。 Anatoli Beliaev - 目前我已经设置了一个 Azure 函数,它将 blob 作为字符串输入变量。我只是尝试在其上使用 foreach-object 方法。 Get-AzStorageBlobContent 在我的脑海中,但该命令也想下载 blob。我想读取 blob 并提取数据并在不下载的情况下发送。 好的,一个简单的 $inputblob.Split([Environment]::NewLine) 对我有用。 【参考方案1】:

正如@David Diamant 在评论部分所建议的那样,要使用 PowerShell 遍历 blob 存储中的文本文件,我们可以使用以下命令:

$inputblob.Split([Environment]::NewLine)

【讨论】:

以上是关于使用 Azure 函数迭代 Blob 存储中的文本文件的主要内容,如果未能解决你的问题,请参考以下文章

Azure:无法从 Azure 函数 HttpTrigger 读取 Blob 文本(400 - 错误请求错误)

使用 C# 从存储在 azure blob 存储中的 200gb 文本文件中读取一行

使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件

使用 Azure 函数从 Azure Blob 存储下载文件会返回不同的文件大小

如何使用 PowerShell Runbook 在 azure blob 存储上创建文本文件?

Azure 函数 blob 存储文件名