[tab/csv] horizontaal sorteren kolommen

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

  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 21-08 20:53

Tjeerd

Be Original, Be Yourself.

Topicstarter
Misschien is de titel niet helemaal helder, maar ik zal het proberen te verduidelijken. Ik heb verschillende bestanden welke op tab- of kommagescheiden manier zijn opgeslagen. Nou wil ik de kolommen in zo'n bestand sorteren, zodanig dat alle kolom(headers) op bijv. alfabetische volgorde komen te staan.Uiteraard moet alle data die in zo'n kolom ook netjes meeverhuizen. Dus:

code:
1
2
3
4
5
geslacht   leeftijd   iq   afstand
A             A          1    A
B             B          2    B
C             C          3    C
D             D          4    D


Moet worden:
code:
1
2
3
4
5
afstand   geslacht   iq   leeftijd
A           A             1    A
B           B             2    B
C           C             3    C
D           D             4    D

Let niet op de data, het gaat om het principe dat ik dus de kolommen met bijbehorende rijen gegevens wil sorteren. Nou kan ik me voorstellen dat dit nog gaat lukken bij <255 kolommen in Excel bijv. Maar ik heb soms datasets die honderden kolommen bevatten en tigduizend rijen. Een database zou een betere oplossing zijn, maar met de software die we gebruiken om deze data te verwerken gaat dat nog niet echt lukken momenteel.

Mijn vraag: is er software beschikbaar die kan doen wat ik wil?

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • superduper
  • Registratie: Juli 2001
  • Laatst online: 22-08 16:19

superduper

Z3_3.0 Woeiiii

Ik zou even iets korts schrijven in Vbasic als je daar een beetje mee uit de voeten kunt. Ik weet niet of access ook een kolommen beperking heeft, anders zou dit ook nog kunnen.

  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 21-08 20:53

Tjeerd

Be Original, Be Yourself.

Topicstarter
Ik kan het helemaal zelf programmeren, dat is een oplossing die wel kan, maar die wel weer wat extra tijd kost. Hetgeen ik wil is in principe ook vrij simpel, maar ik wil juist weten of er al een script/stuk software bestaat wat kan doen wat ik wil :)

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Wellicht handig om volgende keer even je Excel versie erbij te vermelden :)

In Excel XP is het iig wel te realiseren:

Data | Sort... | Options... | Orientation: Sort left to right | Ok

Nu kan je rows kiezen waarom je sorteert en gaat je data netjes mee.


HTH :)




Oh en Office vragen kunnen voortaan gewoon in: Officesuites en -software ;)

[ Voor 37% gewijzigd door BtM909 op 25-07-2005 16:50 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • Tjeerd
  • Registratie: Oktober 1999
  • Laatst online: 21-08 20:53

Tjeerd

Be Original, Be Yourself.

Topicstarter
Excel 2003 gebruik ik, maar wat ik al had genoemd, ik heb vaak meer dan 255 kolommen en dat past niet in Excel :(

www.tjeerd.net - To repeat what others have said, requires education, to challenge it, requires brains.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dan kom je denk ik toch aan 't programmeren vrees ik. Dit is een redelijk specifiek probleem en ik kan me bijna (maar zeg nooit nooit) niet voorstellen dat er "iets" is dat precies doet wat je wil.
En het programmeren lijkt me niet meer dan een uurtje werk?

Ik heb wel wat leuks voor je denk ik ;)
Momentje, effe wat code zoeken ... :P

Ben ik weer...
Sjeck dit maar eens. Leg een schema.ini aan in de directory met je textfile (CSV) en zorg dat daarin de juiste definitie staat van de kolommen. Vervogens lees je met een ADO recordset via de textdriver van ODBC de CSV in je recordset en sorteer je vervolgens de fields. Dit weer wegschrijven naar een CSV (via de textdriver ofzo) et voila.

Ik zal eens kijken of ik iets in elkaar kan flansen... Moet niet al te veel werk zijn...

Edit 1:
Klaar :Y) Effe zippen en online pleuren...

Edit 2:
Download (VB6 project)

Even wat uitleg:

Dit programma leest het bestand uit de directory Testdata (mytestdata.txt) in. Dit wordt vervolgens in een tijdelijke MDB gegooid (Access database). In deze MDB wordt een tabel aangemaakt met behulp van een SQL statement (testtable.sql). Met behulp van schema.ini worden de "velden" geparsed (TAB delimited in mijn geval) en in de MDB gegooid. Vervolgens wordt uit de MDB weer alles teruggelezen en in een nieuwe textfile (out.txt) gegooid (wederom met behulp van Schema.ini).

TODO's:
• Tab/komma delimited of fixed length aanpassen
• Tussentijdse MDB weggooien
• Schema.ini zou je dynamisch kunnen genereren (voor de in-file zou je de fields collection kunnen doorlopen nadat je het SQL statement hebt uitgevoerd) en voor de outfile zou je door de fields heen kunnen loopen en deze sorted outputten. Als je het op deze manier doet hoef je alleen het SQL statement aan te passen als er ooit een veld bij komt.
• De tussentijdse MDB was iets waar ik geen zin in had om uit te zoeken. Volgens mij is die niet nodig en kan het meteen met een recordset, maar dat lukte niet 1 2 3.
• Error handling etc. Dit is puur een "proof-of-concept" projectje.

Je zou natuurlijk zelf door alle records heen kunnen lopen en zelf alles gaan zitten outputten enzo, maar de ervaring leert dat "als je het aan ADO over laat" dit vele, vele malen sneller is bij veel records. Tevens ben je redelijk flexibibel op deze manier want je zou alleen je SQL statement hoeven aanpassen als er een veld bij komt en tevens redelijk "strong-typed" omdat je nu meteen door ADO laat vangen dat alle waardes worden gecontroleerd op geldigheid (voer voor de test maar eens een verkeerde datum in in mytestdata.txt).

Misschien niet het béste idee om je probleem aan te pakken (ik ben toch wel benieuwd naar andere suggesties ;) ) maar ik wed dat het wel 1 van de snellere is.

Edit 3: Ik heb een ge-update versie online gegooid (inc. Executable). Het enige dat je nu moet doen is zorgen dat je SQL statement een tussentijdse tabel creëert die overeenkomt met je CSV die je hebt. Daarna wordt alles voor je gedaan. De schema.ini wordt gegenereerd en gesorteerd en het out-bestand wordt uitgepoept.

Veel mooier dan dit kan ik het je niet voorkauwen, je hebt geluk dat ik zin had om te devven :P

Edit 4:
Ik bedenk me nu: Ik weet overigens niet eens of Access wel met >255 kolommen overweg kan, maar dat lijkt me van wel :?

[ Voor 164% gewijzigd door RobIII op 25-07-2005 18:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
AAAARG :(
Alle moeite voor niks :P

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1