2016-04-22 11 views
-4

私はCSVファイルを国別、州別、都市別に並べ替えています。CSVをこの新しい形式に変換する

USA 
-California 
--Bakersfield 
--Barstow 
--Berkeley 
--Chico 
--Delano 
--El Centro 
--Eureka 
--Fresno 
--Irvine 
-Colorado 
--Colorado Springs 
--Denver 
--Durango 
--Fort Collins 

国が単一のダッシュで先頭に追加され、都市がそれぞれの州内の2つのダッシュで先頭に追加されます。

USA,California,Arcata 
USA,California,Bakersfield 
USA,California,Barstow 
USA,California,Berkeley 
USA,California,Chico 
USA,California,Delano 
USA,California,El Centro 
USA,California,Eureka 
USA,California,Fresno 
USA,California,Irvine 
USA,Colorado,Colorado Springs 
USA,Colorado,Denver 
USA,Colorado,Durango 
USA,Colorado,Fort Collins 

私はこのようになり、出力ファイルを作成したい:それはこのようになります。

どうすればこの出力を作成できますか?ありがとう!

+0

どのようなプログラミング言語で、これまでに何を試しましたか? –

+0

あなたが今までに持っているものを見せてください... – anu

+0

解決策を望む技術は何ですか? PowerShellスクリプトやC#コードやJavaコードなどが必要ですか? –

答えて

0

PowerShellで以下のスクリプトを確認してください。私は、1つの国しか存在しないことを前提にしています。エントリは何らかの形で混乱する可能性があります。

はまた、私は、ヘッダーのためのあなたのCSVでの最初の行としてこの行の下にあることを前提としています

Country,State,City 

あなたにも、他のプログラミング言語で同様のロジックを使用することができます。置き換え

$csvInput = Import-Csv -Path "C:\Data\Test\abc.csv" | Sort-Object State 

$outputFileContent = @() 

$outputFileContent += ($csvInput[0].Country) 

$oldState = "" 
$newState = "" 
foreach($csvRow in $csvInput) 
{ 
    $newState = $csvRow.State 
    if($newState -ne $oldState) 
    { 
     $outputFileContent+= ("-" + $csvRow.State) 
    } 
    $oldState = $newState 

    $outputFileContent += ("--" + $csvRow.City) 
} 

$outputFileContent | Out-File -FilePath "C:\Data\Test\testOutput.txt" 

"C:\ DATA \テスト\ abc.csv" あなたの入力CSVファイルと "C:\ DATA \テスト\ testOutput.txt" を使用して、出力ファイルへのパスを持ちます。

+0

ありがとう、アマン!それは素晴らしいです!実際には複数の国が存在しますが、ここで何をしているのですか。 1. CSVファイル を開きます。2.各行を調べます 3.国/州が前の と同じかどうかを確認します。シティ –

0

私はAmanのおかげで、Kenがヒントを得て出発点を示してくれました。特にエレガントなコードではありませんが、完全に機能します。

あなたの好奇心が強い人は、下のコードをyourfile.phpにコピーし、上記のようにCSVファイルを作成してlist.csvとして保存し、両方のファイルをPHPサーバーに入れて、あなたのfile.phpをブラウザを使用して、意図したとおりの結果を出力します。

$myfile = fopen("list.csv", "r") or die("Unable to open file!"); 

//echo fread($myfile,filesize("list.csv")); 

fclose($myfile); 

$csv = array_map('str_getcsv', file('list.csv')); 

//echo is_array($csv) ? 'Array' : 'not an Array'; 

//$line=1; //If you need to compare the array with your CSV to make sure all lines are included 

foreach ($csv as $i => $row) 
{ 
    $lastcountry=$country; 
    $laststate=$state; 

    $country=""; 
    $state=""; 
    $city=""; 

    $country=trim($row[0]); 
    $state=trim($row[1]); 
    $city=trim($row[2]); 

    if ($country <> $lastcountry) { 
     echo $country . "<br>"; 
    } 
    if ($state <> $laststate) { 
     echo "-" . $state . "<br>"; 
    } 
    echo "--" . $city . "<br>"; 

    //$line++; 
    //echo $line . " <strong>Country:</strong> " . $country; 
    //echo " <strong>State: </strong> " . $state; 
    //echo " <strong>City: </strong>" . $city . "<br>"; 
} 
関連する問題