Private/ConvertTo-BridgeTimeRange.ps1
|
function ConvertTo-BridgeTimeRange { [CmdletBinding()] <# .SYNOPSIS Εξάγει χρονικό εύρος από κείμενο OCR. .DESCRIPTION Η ConvertTo-BridgeTimeRange αναλύει γραμμές κειμένου από OCR και εξάγει ημερομηνίες/ώρες για να δημιουργήσει χρονικό εύρος κλεισίματος γέφυρας. .PARAMETER Lines Πίνακας με γραμμές κειμένου από OCR ανάλυση. .OUTPUTS [PSCustomObject] - Αντικείμενο με From, To και ClosedFor properties. .EXAMPLE ConvertTo-BridgeTimeRange -Lines @('Από 25/04/2025 14:00', 'Έως 25/04/2025 14:30') # Returns:@{From=[datetime]; To=[datetime]; ClosedFor=[timespan]} .NOTES Χρησιμοποιεί regex pattern matching για εξαγωγή ημερομηνιών με μορφή dd/MM/yyyy HH:mm από το κείμενο. #> [OutputType([PSCustomObject])] param ( [Parameter(Mandatory)] [string[]]$Lines ) try { # Συνενώνουμε όλες τις γραμμές σε ένα ενιαίο string $text = $Lines -join ' ' # Ορίζουμε regex pattern για ημερομηνία και ώρα $pattern = '(?<Date>\d{2}/\d{2}/\d{4})\s+(?<Time>\d{2}:\d{2})' # Εκτελούμε regex match $bmatches = [regex]::Matches($text, $pattern) # Βεβαιωνόμαστε ότι υπάρχουν τουλάχιστον δύο matches if ($bmatches.Count -lt 2) { throw [System.Management.Automation.ErrorRecord]::new( ([System.Exception]::new('Αποτυχία ανάλυσης ημερομηνιών: Δεν βρέθηκαν επαρκείς ημερομηνίες και ώρες για ανάλυση.')), 'NotEnoughDateTimes', [System.Management.Automation.ErrorCategory]::InvalidData, $Lines ) } # Παίρνουμε τα 2 πρώτα matches $from = [datetime]::ParseExact($bmatches[0].Value, 'dd/MM/yyyy HH:mm', $null) $to = [datetime]::ParseExact($bmatches[1].Value, 'dd/MM/yyyy HH:mm', $null) # Επιστρέφουμε structured αντικείμενο return [PSCustomObject]@{ From = $from To = $to ClosedFor = $to - $from } } catch { $errorRecord = [System.Management.Automation.ErrorRecord]::new( ([System.Exception]::new("Αποτυχία ανάλυσης ημερομηνιών: $($_.Exception.Message)")), 'BridgeTimeParseError', [System.Management.Automation.ErrorCategory]::InvalidData, $Lines ) throw $errorRecord } } |