Toon posts:

[FlashMX source]CSV Object....CSV's Laden! :)

Pagina: 1
Acties:
  • 281 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Er worden hier zoveel threads geopend over het inladen van data vanuit db's in combo met php/asp's. En het laden van data uit textfiles...
Remoting bied al veel verschillende methodes, maar niet iedereen kan flash remoting server betalen....

Als respons heb ik een component/class(je) geschreven dat CVS's laad.

De functionaliteit:
Hij werkt ongeveer hetzelfde als het xml object.....ongeveer that is...

als je een file wilt laden:
Je gooit eerst het CSV AS component in je Library(hij hoeft alleen in de library te zitten, niet op de stage zetten).
Daarna heb je volledige functionaliteit...gooi dit bv maar eens op root.

code:
1
2
3
4
5
6
7
8
myCSV = new CSV();
myCSV.onLoadCSV = output;
myCSV.loadCSV('test.csv');

//Eigen code hieronder dus
function output(data){
   _root.data = data;
}


Stel nou dat je csv file er zo uitziet:

code:
1
2
3
4
Titel,Url,Tekst
Tweakers,http://www.tweakers.net,Tweakers is cool!
GoT,http://gathering.tweakers.net,Got is ook cool!
Flashguru,http://www.flashguru.co.uk,flashguru:een mooie flashblog


Dan gaat (in dit geval) _root.data er als volgt uitzien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Variable _level0.dat = [object #5, class 'Object'] {
    0:[object #6, class 'Object'] {
      Titel:"Tweakers",
      Url:"http://www.tweakers.net",
      Tekst:"Tweakers is cool!"
    },
    1:[object #7, class 'Object'] {
      Titel:"GoT",
      Url:"http://gathering.tweakers.net",
      Tekst:"Got is ook cool!"
    },
    2:[object #8, class 'Object'] {
      Titel:"Flashguru",
      Url:"http://www.flashguru.co.uk",
      Tekst:"flashguru:een mooie flashblog"
    }
  }


Dus netjes geparsed en te gebruiken.

Handig functionaliteit dus:
Php'tje gooit csv'tje eruit in het formaat:

code:
1
2
3
dbnaam1, dbnaam2, dbnaam3
record1,record1,record1
record2,record2,record2


Flash doet dit:
code:
1
2
3
4
5
6
7
8
myCSV = new CSV();
myCSV.onLoadCSV = output;
myCSV.loadCSV('test.php');

//Eigen code hieronder dus
function output(data){
   _root.data = data;
}


Jammer genoeg gebruikt dit ding op dit moment nog geen dataproviders, dat kan ik wel maken als men er hier vraag naar heeft.
Voor degenen die niet weten wat dataproviders zijn:
dataproviders zitten in de standaard componenten van flashMX, en kunnen automatisch worden aangewezen aan deze componenten. Dan hoef je dus geen eindeloze arrays, of datainserts te doen.

Heel graag wil ik jullie comments, requests en andere horen, zodat deze class uitgebouwd kan worden.

De source:
http://members.chello.nl/r.hauwert/CSV.fla

Enjoy.

[ Voor 0% gewijzigd door Verwijderd op 29-10-2002 00:55 . Reden: url change ]


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 17-06 09:56

XangadiX

trepanatie is zóó kinderachtig

Zeker voor kleine databasejes is ie briljant B-top! _/-\o_

maar ik zie mezelf er nog niet zo snel een forum mee bouwen ;)

Stoer; Marduq


Verwijderd

Topicstarter
Kenmerkende stilte :)

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

yo ralph...heb je msn pas net gelezen..

eigenlijk voor data syndicatie is csv niet zo'n geschikt formaat, lees als in niet de defacto standaard, maar RSS en voor data uitwisseling is XML eigenlijk de standaard. Eigenlijk snap ik dus niet zo goed wat ik met een CSV class moet ( of krijg jij altijd je data in mooie excel sheetjes ;) )

Verder zie ik zo 1-2-3 niet grove fouten/rare dingen, vraag me alleen af waarom je this.dat naar new Object(); is dat een 'reset' ?

nice work as always though :)

"You're only as good, as what you did last week."


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 17-06 09:56

XangadiX

trepanatie is zóó kinderachtig

toch; ik moet erbij zeggen dat het voor bestanden met 'kleine' databases het enorm handig kan zijn. Ik noem een kwisspelletje, of een overzicht met mensen die naar een niet nader te noemen tweakermeeting gaan.

Maar XML is eigenlijk de standaard, dat is waar en dat maakt deze functie een beetje overbodig... een beetje maarr ;)

Stoer; Marduq


  • waxle
  • Registratie: December 2000
  • Laatst online: 17-08 15:52

waxle

Schavuit & Schobbejak

First things first: cool gedaan! Het kan wellicht handig zijn voor kleine database-koppelingen ed. je zou op deze manier je outlook-adressenbestand in een flash kunnen jenzen bijvoorbeeld ;)

Wat XangadiX zegt, is wel een klein beetje waar... XML kun je namelijk ook prima vanuit een php laten komen, en ik weet eerlijk gezegd niet of er nog een andere meerwaarde van CSV tov XML is... maar toch; vette props jouw kant op; je moet er maar op komen. :)

ouwe meuk
Nichts ist toller als ein Zündapp Roller!


Verwijderd

Topicstarter
Inderdaad, XML is defacto. Ik heb trouwens ook getest met mijn adressenbestand, en ja, da's lachen.

Dit is overigens niet bedoelt als alternatief op het XML object, eerder op het loadvars object met zijn name value pairs.

Interresse hiervoor was mostly generated door de dataproviders. Deze behouden dan wel meer een csv structuur als dan een xml structuur.
Ook ben ik van mening dat voor kleine shit een csv exporter/importer waarschijnlijk makkelijker te behouden is als een xml exporter importer. Daarna zie ik het als meer rauw, en dat is het ook.....ik zal proberen dit aan een dataprovider te koppelen om dit te illustreren.

Verwijderd

cool ralph!!! heb hem even getest en werkt echt lekker. Ik vind overigens dat Flash maar stront met XML overweg gaat (zie ook eens een eerdere post van mij); en voor n00bs is deze methode vele makkelijker dan een XML bestand inladen!!!

thnx!!!

Verwijderd

Je pakt je oefeningen wel goed aan :)

Wat ik me zat af te vragen: ik dacht over het algemeen begrepen te hebben dat het gebruik van __proto__ wordt afgeraden door Macromedia? Alhoewel in 'OOP with Actionscript' ook wordt laten zien hoe je met __proto__ een 'cleanere inheritance' hebt. Gebruik je em daarom? (Nadeel ervan was dat de het nieuwe commando 'super' er buggy van wordt.)

En ikv code optimaliseren: zou je in 'for(n=0; n<l-1; n++)' niet ook beter even die '-1' wegwerken? (door 'l = p.length - 1;' te doen).

Ik denk dat deze class een mooie uitbreiding is van de manieren waarop je data kunt leze/parsen binnen flash: vooral als je em aan een dataProvider kunt koppelen. Mocht je ooit generiek data in willen voeren is het toch leuk dat je CSVs aan het lijstje externe data kunt toevoegen.

Top dus! (En ik ga em zeker nog even uitpluizen want ik snap nog niet heel veel van het hele inheritance gebeuren ;))

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Houdt je CSV-reader ook rekening met verschillende soorten delimiters en enclosures?

waarde,"blabla,asda,asd",waarde2

voor dat soort data?

edit:
Zie ook bijvoorbeeld PHP's fgetcsv()

Verwijderd

Topicstarter
Vandaag ga ik deze versie updaten met de commentaren:

loop var -1 optimalisatie.
delimiters&enclosures.
dat object reset.
evt nog dataprovider.

Verwijderd

Topicstarter
Nieuwe source op:

http://members.chello.nl/r.hauwert/CSV.fla

Nog steeds geen dataProvider, ik zit heel erg na te denken hoe dit te doen in een nette oop style....het moet niet zo worden dat het callback doc van CSV een dataprovider is.
Het zou mooier zijn om een method .toDataProvider(dataProviderInstance) te hebben. Maar dan moet ik weer uit de CSV structuur breken en een CSVData object hebben, wat gezien de structuur van het XML object niet correct lijkt.

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Verwijderd schreef op 30 oktober 2002 @ 11:58:
Nieuwe source op:

http://members.chello.nl/r.hauwert/CSV.fla

Nog steeds geen dataProvider, ik zit heel erg na te denken hoe dit te doen in een nette oop style....het moet niet zo worden dat het callback doc van CSV een dataprovider is.
Het zou mooier zijn om een method .toDataProvider(dataProviderInstance) te hebben. Maar dan moet ik weer uit de CSV structuur breken en een CSVData object hebben, wat gezien de structuur van het XML object niet correct lijkt.
misschien interesant om de coding standard van de FUI components te volgen, dus de method setDataProvider(dataProvider) te noemen. Deze mag dan een array, of array object of instantie van een dataprovider class krijgen. Hoewel ik je persoonlijke mening van de FUI components wel weet, lijkt het me handig om enige compatiblity tussen de classes te krijgen ;)

zie trouwens dat je mijn opmerking hebt doorgevoerd? :)
oh,when? schreef op 29 oktober 2002 @ 10:20:

Verder zie ik zo 1-2-3 niet grove fouten/rare dingen, vraag me alleen af waarom je this.dat naar new Object(); is dat een 'reset' ?

"You're only as good, as what you did last week."


Verwijderd

Topicstarter
inmiddels heb ik hem wat meer gesculped naar het XML object, dus geen this.dat, maar de instance zelf is het data object;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#initclip 1
/*
    CSV Loader Class by R.Hauwert/B-Top
    Actually a a training OOP Experiment, inheriting from internal objects.
    Should be used to load in CSV files
*/

//CSV Constructor
_global.CSV = function(){
    this.init();    
}

//inherit from LoadVars Class
p = CSV.prototype.__proto__ = LoadVars.prototype;

//Initialise Class, set __constructor__ for use with super();
p.init = function(){
    this.prototype.__constructor__ = LoadVars;
    ASSetPropFlags(this.prototype, ["__constructor__"], 1);
}

//Main Load Function
p.loadCSV = function(url,de,en){
    if(de == null){de = ',';    }
    if(en == null){en = ''} else {en = en.substr(0,1)} 
    this.onData = function(raw){
        this.parseCSV(raw,de,en);   
    };
    this.load(url);
}


//Parses CSV to AS Objects
p.parseCSV = function(d, de, en){
    var p, l, n, m, h, hl, cur;
    p = d.split(chr(10));
    p = p.join('').split(chr(13));
    h = p.shift('');
    h = h.split(de);
    hl = h.length;
    l = p.length - 1;
    for(m = 0; m<hl; m++){
        h[m]=h[m].split(en).join('');
    }
    for(n=0; n<l; n++){
        cur = p[n].split(de);
        this[n] = new Object();
        for(m = 0; m<hl; m++){
            this[n][h[m]] = cur[m].split(en).join('');
        }
    }
    this.onLoadCSV(this);
}

//Returns item (object) at given index.
p.getItem = function(i){
    return this[i]; 
}

//Removes item at given index.
p.removeItem = function(i){
    delete this[i]; 
}

//Handler for onLoad  event. Should be set for every instance.
p.onLoadCSV = null;

delete p;
#endinitclip

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

pfff..ralph niet zo snel...kan niet 24/7 /13 gaan checken ;)

suggestie voor je getItem en removeItem. return een -1 als het item niet bestaat of er een out-of-range is gegeven :)

/edit suggestie 2

en voeg natuurlijk dan gelijk een push en een pop method toe ? :) of zou je dan weer een fat class krijgen :|

[ Voor 0% gewijzigd door oh,when? op 30-10-2002 12:53 . Reden: suggesties ]

"You're only as good, as what you did last week."


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Istie nu Excell-compatible? Enclosures zijn in Excell(csv) namelijk optioneel en worden alleen toegevoegd als de string de delimiter bevat. En de enclosures zelf worden natuurlijk weer \" of \' binnen de string zelf ;)

Jaja.. CSV parser maken is nog best lastig karwei ;) Ben er ook ooit aan begonnen totdat ik erachter kwam dat PHP er dus al eentje ingebouwd had :P

Verwijderd

Topicstarter
Owen:
push en pop gaat alleen op voor array/list achtige objecten, dat is dit niet.
maar misschien dat ik die structuur maar moet gaan aanhouden.

Bosmonster:
Enclosures werken ja, maar zoals de php enclosere methode:
The optional enclosure cannot be null, and is limited to one character. If enclosure is more than one character, only the first character is used.

Verwijderd

Topicstarter
OP flashcoders zijn ze nogal stil.....pfff....

  • OzBoz
  • Registratie: Maart 2000
  • Laatst online: 17-08 13:58

OzBoz

.:.H.:.I.:.P.:.

Ik lees het allemaal.. maar tis te heftig voor me. * OzBoz duikt weer in Friends of Ed's PHP for Flash :)

My Fizion | My 3D prints | LinkedIn


  • tie-rep
  • Registratie: Oktober 2001
  • Laatst online: 19-02 15:56

tie-rep

nu met ir. !

OzBoz schreef op 30 oktober 2002 @ 18:05:
Ik lees het allemaal..
maar tis te heftig voor me. <*knip*>
...maar heb op dit moment weinig tijd (voor dit soort leuke experimenten)

maar ga vooral door! :)

Verwijderd

Verwijderd schreef op 30 oktober 2002 @ 17:30:
OP flashcoders zijn ze nogal stil.....pfff....
Iedereen zit op devcon ;)

Verwijderd

Topicstarter
Soms snap ik het niet, maar het lijkt tijd te zijn de hele class te herschrijven.

Verwijderd

want? Wat bevalt je niet aan deze? Vertel!
Mocht je nog documentatie zoeken: Ik heb hier Philip Kermans Actionscript in MX en het AS OOP boek. (maar ei'k denk ik niet dat je dat zoekt :))

Verwijderd

Topicstarter
Op dit moment inherit ik alles van LoadVars....
Dat zat me al niet helemaal lekker, en ik heb er dus eens wat vragen op Flashcoders gesteld. Blijkt dat het stelen van 2 proto's van LoadVars genoeg zou moeten zijn.....ik ga daar toch maar een naar kijken.

Die boeken heb ik idd niet nodig... :) as oop heb ik wel, maar viel me eerlijk gezegd een beetje tegen.

[ Voor 0% gewijzigd door Verwijderd op 31-10-2002 09:29 . Reden: Boeken ]


Verwijderd

Ik had t gelezen ;) ... maar helemaal opnieuw? Valt wel mee toch?

offtopic:
ik vind een flash boek vaak al de aankoop waard als ik binnen 5 minuten bladeren al iets nieuws geleerd heb ;) Dat was hier ook zo. Ik ben een component aan het afronden, en de info daarover heb ik nergens zo uitgebreid gevonden... dus wat dat betreft... maar de OOP basis kun je inderdaad misschien beter ergens anders vandaan halen... en hij was best duur voor zo'n dun boek je ;)

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Verwijderd schreef op 30 oktober 2002 @ 15:38:
Owen:
push en pop gaat alleen op voor array/list achtige objecten, dat is dit niet.
maar misschien dat ik die structuur maar moet gaan aanhouden.
eigenlijk ook wel voor een soort stack. en aangezien dit component een stack returned, vind ik wel dat je ook je deze zelf moet kunnen wijzigen, net zoals het xml object methods heeft een xml document op te bouwen.

:)

/edit

ik vind het oop boek wel redelijk handig, word lekker uitgewijd over de verschillende actionscript gebieden, echter wat ik nu ook eens wil is een item / interview met Gary Grossman, de bedenker achter Actionscript. Over design van de taal en het model naar ECMA en bepaalde keuzes en implementatie keuzes.

"You're only as good, as what you did last week."

Pagina: 1