I've added some new functionality to the csv plugin. I'm still not
fully satisfied with it, but it's a start. Perhaps if others start
tinkering with it we can get some ideas for how to improve its
functionality and syntax.
Here's the plugin:
<?php
function BOLTFcsv($args, $zone) {
global $BOLTcsvData;
if (isset($BOLTcsvData[$args['page']])) $data =
$BOLTcsvData[$args['page']];
else {
$content = trim(BOLTloadpage($args['page']));
$rows = explode("\n", $content);
$data['content'] = substr($content, strpos($content, "\n") + 1);
$data['headers'] = explode(',', $rows[0]);
foreach ($rows as $i => $ii) {
if ($i == 0) continue;
$cols = explode(',', $ii);
foreach ($cols as $c => $cc) $data[$i][$c] = $cc;
}
$BOLTcsvData[$args['page']] = $data;
}
if (isset($args['row']) && isset($args['col'])) return
$data[$args['row']][$args['col'] - 1];
if (isset($args['row'])) {
if (isset($args['fmt'])) {
$out = $args['fmt'];
foreach ($data['headers'] as $h => $hh) {
$out = str_replace("{+$hh}",
$data[$args['row']][$h], $out);
}
return $out;
}
return $rows[$args['row']];
}
return '[t border=1][r][h]' . implode('[h]', $data['headers']) .
'[r][c]' . str_replace(Array(',', "\n"), Array('[c]', "[r][c]"),
$data['content']) . '[t]';
}
function BOLTXcsvsave($value, $field) {
global $BOLTarray;
$args = BOLTargs($BOLTarray['csvtarget']);
if (!isset($args['row']) && !isset($args['col'])) {
BOLTsavepage($args['page'], $value, '', false);
return $value;
}
$content = trim(BOLTloadpage($args['page']));
$rows = explode("\n", $content);
if (isset($args['row']) && !isset($args['col'])) {
$rows[$args['row']] = $value;
$content = implode("\n", $rows);
BOLTsavepage($args['page'], $content, '', false);
return $value;
}
foreach ($rows as $i => $ii) {
$cols = explode(',', $ii);
foreach ($cols as $c => $cc) $data[$i][$c] = $cc;
}
$data[$args['row']][$args['col'] - 1] = $value;
foreach ($data as $i => $ii) {
$rows[$i] = implode(',', $ii);
$content = implode("\n", $rows);
}
BOLTsavepage($args['page'], $content, '', false);
return $value;
}
And here's the page markups:
test.csv
[(include test.csv.1#csv)]
<markup>
[(csv page=test.csv.1#csv)]
----
[(csv page=test.csv.1#csv row=2 fmt='Name: {+name}, Age: {+age},
State: {+state}')]
----
[(csv page=test.csv.1#csv row=2 col=2)]
</markup>
[form]
Row [text row size=3] Col [text col size=3] Value [text value]
[session csvtarget "row={=row} col={=col} page=test.csv.1#csv"]
[session csvsave '{=value}']
[submit]
[form]
test.csv.1
Just some stuff...
[[#csv]]name,age,state
Bob,23,CA
Mark,37,OK
John,23,CA
Dave,24,NM
Rich,37,TX[[#end]]
I'm thinking there needs to be a way to generate row and col
indicators by other criteria, like
col=age
row=Mark
find="age=37" (sets row and col)
I'll keep tinkering... Feedback esp welcome during this process.
Cheers,
Dan
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"BoltWire" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/boltwire?hl=en
-~----------~----~----~----~------~----~------~--~---