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
-~----------~----~----~----~------~----~------~--~---

Reply via email to