我有一个按国家/地区排序的CSV文件,然后是州,然后是城市。它看起来像这样:
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
我想创建一个如下所示的输出文件:
USA
-California
--Bakersfield
--Barstow
--Berkeley
--Chico
--Delano
--El Centro
--Eureka
--Fresno
--Irvine
-Colorado
--Colorado Springs
--Denver
--Durango
--Fort Collins
状态前面有一个短划线,城市在每个州内有2个破折号。
我如何创建此输出?谢谢!
答案 0 :(得分:0)
请在 PowerShell 中查看以下脚本。我假设只有一个国家。这些条目可能会以任何方式混乱。
另外,我假设您的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 \ Test \ abc.csv"使用输入的CSV文件和" C:\ Data \ Test \ testOutput.txt"使用输出文件的路径。
答案 1 :(得分:0)
所以我得到了它的工作,感谢Aman和Ken的提示,并向我展示了一个起点。它不是特别优雅的代码,但它确实可以正常工作。
对于任何好奇的人,将下面的代码复制/拼凑到yourfile.php中,按照我上面的格式创建CSV文件并保存为list.csv,将两个文件放到PHP服务器上,然后在浏览器中执行yourfile.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>";
}