Wątek przeniesiony 2023-09-22 19:31 z Edukacja przez Riddle.

Wstawienie tekstu na początku i końcu wiersza w pliku tekstowym

0

Dzień dobry. Jest to mój pierwszy post dotyczący powershella. Potrzebuję pomocy dotyczącej uzupełnienia pliku textowego tekstem na początku i końcu wiersza. Ilość wierszy w pliku jest n-wierszy
Przykład:
Mam taki zapis w pliku txt

Orange;2012-09-08 07:12:22
Apple;2012-09-08 07:12:22
Pineapple;2012-09-08 07:12:22

Wyrazy oddzielone są ; (średnikiem) .

Mam taki skrypcik ale nie oddziela on wyrazów po ;

$inputFile = Get-Content "d:\3\data.txt"
$outputFile = "D:\3\data.sql"

$collate = foreach($Obj in $inputFile) {       
    $begin = "INSERT INTO tab1 SELECT '"
    $end = "'"
    $begin + $Obj + $end

    }

Set-Content -path $outputFile -value $collate

Wynikiem jest :

INSERT INTO tab1 SELECT 'Orange;2012-09-08 07:12:22'
INSERT INTO tab1 SELECT 'Apple;2012-09-08 07:12:22'
INSERT INTO tab1 SELECT 'Pineapple;2012-09-08 07:12:22'

Chciałbym aby finalnie wyglądało to w ten sposób:

INSERT INTO tab1 SELECT 'Orange'; '2012-09-08 07:12:22'
INSERT INTO tab1 SELECT 'Apple'; '2012-09-08 07:12:22'
INSERT INTO tab1 SELECT 'Pineapple'; '2012-09-08 07:12:22'

Z góry dziękuje za pomoc

1

Sformatuj kod.
Te dane wyglądają na pilk CSV z separatorem ustanowionym na ;.
Spróbuj sobie zaimportować te dane do zmiennej przez Import-Csv
Potem przeiteruj i stwórz sobie potrzebne wyjście.
Dokumentacja
BTW jak to ma wpluć jakieś komendy SQL to ja do tego używam Excela czy tam Calc z OpenOffice. Dane się zaimportują ładnie widzisz od razu wyjście.

2

Możesz dorobić własną funkcję, która przetworzy linię zaczytaną z pliku wejściowego.

$inputFile = Get-Content "data.txt"
$outputFile = "data.sql"


function processLine {
    param (
        [string]$Line,
        [string]$Delimiter = ";",
        [string]$QuotationChar = "'"
    )
    $lineFields = $Line -split $Delimiter
    $quotedFields = $lineFields | ForEach-Object { $QuotationChar+$_+$QuotationChar }
    $processedLine = $quotedFields -join $Delimiter
    return $processedLine
}

$collate = foreach($Obj in $inputFile) {
$processedLine = processLine -Line $Obj
$begin = "INSERT INTO tab1 SELECT "
$end = ""
$begin + $processedLine + $end
}

Set-Content -path $outputFile -value $collate
0
yarel napisał(a):

Możesz dorobić własną funkcję, która przetworzy linię zaczytaną z pliku wejściowego.

$inputFile = Get-Content "data.txt"
$outputFile = "data.sql"


function processLine {
    param (
        [string]$Line,
        [string]$Delimiter = ";",
        [string]$QuotationChar = "'"
    )
    $lineFields = $Line -split $Delimiter
    $quotedFields = $lineFields | ForEach-Object { $QuotationChar+$_+$QuotationChar }
    $processedLine = $quotedFields -join $Delimiter
    return $processedLine
}

$collate = foreach($Obj in $inputFile) {
$processedLine = processLine -Line $Obj
$begin = "INSERT INTO tab1 SELECT "
$end = ""
$begin + $processedLine + $end
}

Set-Content -path $outputFile -value $collate

Dziękuje chłopie o to właśnie mi chodziło :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1