0

次の情報を含むcsvファイルがあります

ParentID,DivID,DataElement,Content,Class
Dash_Reg,Summer_Active,Classes.Active,Active Classes:,class1
Dash_Reg,Summer_Active,Classes.Inactive,Inactive Classes:,class1
Summer_Active,Pass_classes,Classes.passed,Classes Passed:,class1
Summer_Active,Failed_classes,failed.classes,Failed Classes:,class1
Dash_FinAid,Award_Amount,Amount.Awarded,Amount Awarded:,class1
Award_Amount,Refund_Status,Refund.Status,Refund Status:,class1

PowerShell で csv を調べて、そこから正しい HTML コードを作成し、適切なネストを作成するという考え方です。これにより作成されるのは、次の HTML コードです。

<div id="Dash_Reg>
<div id="Summer_Active">
<p>Active Classes: <span id="Classes.Active"></span></p>
<p>Inactive Classes: <span id="Classes.Inactive"></span></p>
<div id="Pass_classes">
<p>Passed Classes: <span id="Classes.passed"></span></p>
</div>
<div id="Failed_Classes>
<p>Failed Classes: <span id="failed.classes"></span></p>
</div>
</div>
</div>
<div id="Dash_FinAid>
<div id="Award_Amount>
<p>Amount Awarded: <span id="Amount.Awarded></span></p>
<div id="Refund_Status>
<p>Refund Status: <span id="Refund.Status"></span></p>
</div>
</div>

私が書いたスクリプトは次のとおりです。

import-csv values.csv|group-object -property ParentID|export-csv test.csv
new-item paws.html -type file
$variableset = import-csv test.csv
foreach ($row in $variableset){
new-item (($row.Name) + ".html") -type file
add-content (($row.Name) + ".html") ("<div id='" + ($row.Name) + "'>")
}
$csv = import-csv values.csv
foreach ($row in $csv){
$dataelement = $row.DataElement
$DivID = $row.DivID
$content = $row.content
$parentid = $row.ParentID
$class = $row.Class
add-content (($parentid) + ".html") ("<div id='" + ($DivID) + "'>")
add-content (($parentid) + ".html") ("<div class='" + ($class) + "'>" + ($content)  +<span id='" + ($dataelement) + "'></span></div></div>")
}
add-content paws.html "<html><head><title>PAWS</title><link href='http://rsprodscd.gsu.edu/student-dashboard/assets/css/bootstrap.css' rel='stylesheet'></head><body>"
foreach ($row in $variableset){
$name = $row.Name
add-content (($row.Name) + ".html") "</div>"
get-content (($row.Name) + ".html")|add-content paws.html
rm (($row.Name) + ".html")
}
add-content paws.html "</div>"
add-content paws.html "</body>"
add-content paws.html "</html>"

これにより、次の HTML コードが生成されます。

<html><head><title>PAWS</title><link href='http://rsprodscd.gsu.edu/student-dashboard/assets/css/bootstrap.css' rel='stylesheet'></head><body>
<div id='Dash_Reg'>
<div id='Summer_Active'>
<div class='class1'>Active Classes:<span id='Classes.Active'></span></div></div>
<div id='Summer_Active'>
<div class='class1'>Inactive Classes:<span id='Classes.Inactive'></span></div></div>
</div>
<div id='Summer_Active'>
<div id='Pass_classes'>
<div class='class1'>Classes Passed:<span id='Classes.passed'></span></div></div>
<div id='Failed_classes'>
<div class='class1'>Failed Classes:<span id='failed.classes'></span></div></div>
</div>
<div id='Dash_FinAid'>
<div id='Award_Amount'>
<div class='class1'>Amount Awarded:<span id='Amount.Awarded'></span></div></div>
</div>
<div id='Award_Amount'>
<div id='Refund_Status'>
<div class='class1'>Refund Status:<span id='Refund.Status'></span></div></div>
</div>
</div>
</body>
</html>   

私がやりたいことは、ParentID が CSV の DivID として存在するかどうか、およびその HTML コードがアーチ型の親 ID の下にネストされているかどうかを確認することです。これが理にかなっているのかどうか教えてください。

4

2 に答える 2

0

したがって、これを行う方法は、関数を作成し、csv ファイルを再帰的に処理することでした。

$csv= import-csv values.csv
new-item paws.html -type file
function build_structure
{
                foreach ($row in $csv){                 
if ($row.parentid -eq $args[0]){
add-content paws.html ("<div class='"+$row.divid+"'>")
build_structure($row.divid)
add-content paws.html ("<p class='" + ($row.class) + "'>" + ($row.content) + "<span id='" + ($row.dataelement) + "'></span></p>")
   add-content paws.html ("</div>")                            
}
}
}

build_structure("")
于 2013-06-25T13:09:50.123 に答える
0

これにより、指定されたデータセットから目的の出力が生成されます。入力がファイルにある場合は、convertfrom-csv を import-csv に変更する必要があります。目的の出力には、クラス (class1) が出力の一部として表示されません。出力する行を変更することで、必要に応じて簡単に追加できます<p>。また、目的の出力</div>の最後に a がありません。

このコードは、同じ名前を持つ 2 つの DivID があり、それらの親の名前が異なる場合を処理しないことに注意してください。これを処理する最も簡単な方法は、すべての DivID が一意であることを確認することです。

$csvData = @"
ParentID,DivID,DataElement,Content,Class
Dash_Reg,Summer_Active,Classes.Active,Active Classes:,class1
Dash_Reg,Summer_Active,Classes.Inactive,Inactive Classes:,class1
Summer_Active,Pass_classes,Classes.passed,Classes Passed:,class1
Summer_Active,Failed_classes,failed.classes,Failed Classes:,class1
Dash_FinAid,Award_Amount,Amount.Awarded,Amount Awarded:,class1
Award_Amount,Refund_Status,Refund.Status,Refund Status:,class1
"@

$data = ConvertFrom-Csv $csvData

$divStack = new-object collections.stack

foreach ($item in $data) {
    #
    # Determine if Div or Parent Div is already open
    while ($divStack.count -ne 0 -and 
           $divStack.peek() -ne $item.DivID) {

        #
        # Div is not open. Determine if Parent Div is open
        if ($divStack.peek() -eq $item.ParentID) {
            #
            # Parent Div is open, now open Div
            $divStack.push( $item.DivID)
            "<div id=`"$($item.DivID)`">"
            break;
        } else {
            #
            # Div and Parent Div aren't open, try next one on stack
            $null = $divStack.pop()
            "</div>"
        }
    }

    #
    # Div and Parent Div weren't open. Open them
    if ($divStack.count -eq 0) {
        $divStack.push( $item.ParentID)
        $divStack.push( $item.DivID)
        "<div id=`"$($item.ParentID)`">"
        "<div id=`"$($item.DivID)`">"
    }

    "<p>$($item.Content) <span id=`"$($item.DataElement)`"></span></p>"
}
#
# Close all open Divs
while ($divStack.count) {
    $null = $divStack.pop()
    "</div>"
}
于 2013-06-22T22:54:00.907 に答える