Gå til innhold

Powershell: Importere innhold fra spesifikk linje i tekst-dokument


Anbefalte innlegg

Hei.

 

Si at jeg har dette tekstdokumentet:

Fisk
Kanin
123
aaa999
Katt
Bil

Er det noen måte jeg kan tak i f.eks bare linje 4 og sette det til en variabel?

 

 

 

Spm2:

Dersom dette lar seg gjøre

 

Hva om dokumentet ser slik ut:

Fisk;Ost
Kanin;Marianne
123;Kongen
aaa999:audi
Katt;sjakk
Bil;404

Kan jeg da hente ut to verdier f.eks fra spesifikk linje? la oss si linje 4 her også å få $verdi1 = aaa999, $verdi2 = audi?

 

 

 

Hadde hjupet meg til å få til en masse greie ting i så fall :)

Lenke til kommentar
Videoannonse
Annonse

Da har jeg greid steg 1

$linjer = Get-Content c:\testfil.txt | Measure-Object -line
$linjer = [int]$linjer.Lines


[int]$linjeteller = "0"


Do {
$innhold = (Get-Content c:\testfil.txt)[$linjeteller] 
Write-Host "Starter ny runde"
$innhold


$linjeteller = $linjeteller+1
} until ($linjeteller -eq $linjer)
Lenke til kommentar

Løst

$linjer = Get-Content c:\testfil.txt | Measure-Object -line
$linjer = [int]$linjer.Lines

[int]$linjeteller = "0"

Do {
$import = (Get-Content c:\testfil.txt)[$linjeteller] 


Write-Host "Starter ny runde"
Write-Host det første ordet er $import.Split(",")[0], det andre $import.Split(",")[1].

$linjeteller = $linjeteller+1
} until ($linjeteller -eq $linjer)
Lenke til kommentar

Hei.

 

Si at jeg har dette tekstdokumentet:

Fisk
Kanin
123
aaa999
Katt
Bil

Er det noen måte jeg kan tak i f.eks bare linje 4 og sette det til en variabel?

 

 

 

Spm2:

Dersom dette lar seg gjøre

 

Hva om dokumentet ser slik ut:

Fisk;Ost
Kanin;Marianne
123;Kongen
aaa999:audi
Katt;sjakk
Bil;404

Kan jeg da hente ut to verdier f.eks fra spesifikk linje? la oss si linje 4 her også å få $verdi1 = aaa999, $verdi2 = audi?

 

 

 

Hadde hjupet meg til å få til en masse greie ting i så fall :)

 

Det fine med PowerShell er at det er mange veier til mål :)

 

Første spørsmålet ditt: "Er det noen måte jeg kan tak i f.eks bare linje 4 og sette det til en variabel?"

 

En vri på det du selv skriver, er følgende:

$Linje4 = (get-content .\Evelen.txt)[3] # (Husk at PS begynner med "0" som første forekomst!)

 

Hvis du vil ha linje 2 til 3:

$Linje2og3 = (get-content .\Evelen.txt)[1..2]

 

 

Andre spørsmål: "Kan jeg da hente ut to verdier f.eks fra spesifikk linje? la oss si linje 4 her også å få $verdi1 = aaa999, $verdi2 = Audi?"

 

Igjen, flere måter å løse dette på

 

Alt. 1:

$Evelen2 = (get-content .\Evelen2.txt)[3] # Henter ut kun linje 3 fra tekstfilen og legger dataene inn i Arrayet "$Evelen2"

$verdi1 = ($Evelen2).Split(";")[0]  # Henter ut første forekomst (dvs. verdien før første ";" fra linje 4")

$verdi2 = ($Evelen2).Split(";")[-1] # Henter ut siste forekomst (dvs. verdien etter siste ";" fra linje 4 i filen) - NB! JEg har brukt semikolon (";") som skilletegn! Kunne ha brukt [1] hvis det var forekomst to på linje 4 jeg var ute etter

# Her vil $verdi1 og $verdi2 inneholde henholdsvis verdi 1 og verdi 2 fra linje 4 i Evelen.txt (dvs. aaa999 og Audi)

 

Alt. 2:

$Evelen2 = (get-content .\Evelen2.txt)[3] # Henter ut alle verdier på linje 4

$Alleverdier = ($Evelen2).Split(";") # Legger hver enkelt forekomst fra valgte linje inn som egen forekomst i Arrayet

$Alleverdier[1..($Alleverdier.Count -2)] # Eksempel på å hente ut verdiene fra forekomst 2 ("1") og den nest siste (dvs. "-2")

 

Alt. 3: Importere tekstfilen direkte som CSV-fil:

# Her har jeg tatt utgangspunkt i at tekstfilen ikke inneholder en header i første linje så jeg lager min egen

$Header = "Verdi1","Verdi2","Verdi3","Verdi4"

$EvelenCSV = Import-Csv -Path .\Evelen2.txt -Delimiter ";" -Encoding Default -Header $Header # Importerer hele tekstfilen og legger dataene inn i Arrayet "$EvelenCSV"

$EvelenCSV[3] # Her henter jeg ut alle verdiene fra linje 4 i Arrayet som jeg lagde av tekstfilen ($EvelenCSV[3]).Verdi4 # Her henter jeg ut kun verdien av det som står på linje 4 (dvs. "[3]"), kolonne 4 (dvs. kolonnen jeg kalte "Verdi4")

 

 

And the list goes on and on! Man kan Bruke andre PS-kommandoer, sammen med .NET, RegEx i PS etc.

 

Se for øvrig Windows PowerShell Tip of the Week for eksempler. Legg merke til bruken av "–totalcount" på kommandoen "Get-Content", man kan hente ut kun de linjene man skal jobbe videre med og ikke alle linjer. nyttig hvis tekstfilen har mange linjer.

 

Legg også merke til bruken av "Encoding" ved import/eksport av fildata. F. eks. blir norske tegn fort garbage hvis man ikke angir Encoding.

 

Jeg lagde meg to tekstfiler med utgangspunkt i dine eksempeldata:

 

"Evelen.txt":

Fisk

Kanin

123

aaa999

Katt

Bil

 

"Evelen2.txt"

Fisk;Ost

Kanin;Marianne

123;Kongen

aaa999;audi;bbb888;bmw

Katt;sjakk

Bil;404

  

* Med forbehold om skrivefeil :eek:

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...