PowerShell : căutări în fişiere ASCII

Lucrăm cu Microsoft PowerShell ISE (Run as administrator) în Windows 10 Professional.

Descărcaţi codulPentru vizualizare, folosiţi scrollbar-ul din josul blocului de cod.
#################################################################################################################
# Autor: octaG, octag.ro                                                                                        #
# Data: Feb. 14, 2017                                                                                           #
# Versiunea: 1.0                                                                                                #
#################################################################################################################
# Variabilele programului:                                                                                      #
# -- calea: directorul-sursa                                                                                    #
# -- filtrul: tipul-fisierului-cautat                                                                           #
# -- fisierele : tabloul-numelor-fisierelor-gasite                                                              #
# -- tabloul: tabloul-continuturilor-fisierelor-gasite;                                                         #
#    ---- fiecare element al acestui tablou este el-insusi tabloul-randurilor-fisierului-respectiv              #
# -- contorul: iteratorul variabilei "tablou"                                                                   #
# -- alt-contor: contorul numarului de aparitii (randuri-pe-care-se-gaseste) al itemului cautat intr-un fisier  #
# -- ce_caut: itemul cautat                                                                                     #
# -- muncitori:                                                                                                 #
#    ---- muncitorul: steagul care ne anunta gasirea itemului cautat pe un anumit rand                          #
#    ---- muncitorul_fisierului : steagul care ne anunta gasirea itemului cautat intr-un anumit fisier          #
#    ---- muncitorul_caii: calea completa a fisierului analizat, element din "tablou"                           #
# -- tabloul_fisierului : tabloul-randurilor-ce-contin-itemul-cautat-din-fisierul-curent                        #
# -- contorul_randurilor: iteratorul variabilei "tabloul_fisierului"                                            #
# -- numarator : iteratorul randurilor din fisierul curent                                                      #
#################################################################################################################

$calea = "C:\Octavian\recuperare_acer_17iunie2016\Octavian\proiecte_TeXandFriends_mai2015\"
$filtrul = "*.tex"

$fisierele = Get-ChildItem -Path ($calea) -Filter ($filtrul) -Name -Recurse 
#daca am introdus parametrul Name, se returneaza string-uri, 
#vezi "https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/get-childitem" la OUTPUTS

$tabloul = @{} #un tablou asociativ, hash-table
$contorul = 0
$alt_contor = 0
$ce_caut = "liber"
$muncitorul = $false
$muncitorul_fisierului = $false
$muncitorul_caii = $null
$tabloul_fisierului = @{}
$tabloul_fisierului_sortat = @{}
$contorul_randurilor = 0
$numarator = 0

foreach($fisier in $fisierele){
  $muncitorul_caii = $calea + $fisier
  $tabloul[$contorul] = Get-Content -Path ($muncitorul_caii) 
  #rezultatul este un hash-table format cu liniile din fisierul curent, "fisier", 
  #vezi "https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/get-content"
      
  foreach($lucratorul in $tabloul[$contorul]){
      $numarator++
      #resetez steagurile, contoarele locale:
      $muncitorul = $false
      $muncitorul = $lucratorul.Contains($ce_caut)

      if( $muncitorul ){
             $alt_contor++
             #salvez numarul randului:
             #completarea ca hash-table: 
             #$tabloul_fisierului += @{($contorul_randurilor) = ($numarator)}
             $tabloul_fisierului[$contorul_randurilor] = $numarator
             $contorul_randurilor++
      }      
  }

  if( $alt_contor -ne 0 ){
       "Gasit in fisierul: `"$muncitorul_caii`" pe [$contorul_randurilor] randuri."

       foreach($lucratorul2 in $($tabloul_fisierului.Values | Sort-Object)){ # ma asigur ca afisarea se face in ordinea crescatoare!
          # Pentru Values, vezi "https://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx"
          # Pentru Sort-Object, vezi "https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.utility/sort-object"
          "Gasit pe randul: [$lucratorul2]."
       }

       "Fisierul are [$($tabloul[$contorul].Count)] linii.`n***************************"
  }
      
  $contorul++
  #resetez steagurile, contoarele locale:
  $alt_contor = 0
  $contorul_randurilor = 0
  $tabloul_fisierului = $null  #cum pornim garbage-collector-ul?
  $tabloul_fisierului = @{}
  $numarator = 0
}

"Am analizat [$($tabloul.Count)] fisiere."