Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

(Deel van) Bestandsnaam in CSV-bestand als kolom toevoegen

Pagina: 1
Acties:

  • mikekiwi
  • Registratie: Maart 2004
  • Laatst online: 24-11 19:08
Ik zit regelmatig met de volgende situatie: een hele berg csv-bestanden waar bij in de bestandsnaam informatie staat die ik graag in het bestand zelf zou willen hebben.

Bestandsnaam bevat een periode-aanduiding die niet in de inhoud van het bestand zit, ik wil dan die periode-aanduiding (de gehele bestandsnaam mag ook) als kolom aan het bestand toevoegen.
Elke regel moet dan die gegevens bevatten, zodat ik uiteindelijk de bestanden kan samenvoegen en openen in excel (en dan kan pivotten e.d.).

Heeft iemand een handige manier om dit toevoegen van die bestandsnaam aan de bestandsinhoud te doen? Scheelt me echt behoorlijk wat tijd… Platform = WinXP.

Dank voor het meedenken!

  • Meekoh
  • Registratie: April 2005
  • Laatst online: 17-11 22:19
Kijk eens naar CSVED, is een heel krachtig CSV edit programmatje.
Maakt er tenminste niet zo'n fuck up van als excel.

Computer says no


  • mikekiwi
  • Registratie: Maart 2004
  • Laatst online: 24-11 19:08
Meekoh schreef op dinsdag 27 juli 2010 @ 14:06:
Kijk eens naar CSVED, is een heel krachtig CSV edit programmatje.
Maakt er tenminste niet zo'n fuck up van als excel.
Sowiezo bedankt voor de tip, handig programma! Maar ik zie nergens de optie om de bestandsnaam als kolom toe te voegen en al zeker niet bij 150 (o.i.d.) bestanden in 1 keer...

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Ik heb het niet getest, maar als je PowerShell v2 installeert (aangezien je nog XP gebruikt) zou je dit script kunnen proberen:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
Function Add-FileNameColumn($objFileName) 
    {
    $data | Import-CSV $objFileName
    $data | Add-Member -MemberType noteProperty -Name <kolomnaam> -Value $objFileName
    }

$arrFileName = Get-ChildItem -Path <map met alle CSV> -Include *.cvs -Recurse

ForEach ($objFileName in $arrFileName)
    {
    $objFileName | Add-FileNameColumn
    }


Heb het maar rap-rap geschreven maar zou in theorie moeten werken.

(alleen <kolomnaam> en <map met alle CSV> aanpassen)

[ Voor 14% gewijzigd door YellowOnline op 27-07-2010 16:07 ]


  • mikekiwi
  • Registratie: Maart 2004
  • Laatst online: 24-11 19:08
Jeetje, dat ziet er goed uit! Maar..ik kan het helaas niet gebruiken (heb ik weer). SP3 op XP is nodig om Powershell te installeren en die SP3 heb ik niet. 't Is mijn werkpc overigens, we gaan over een niet al te lang tijdje naar Win7, maar tot die tijd even geen upgrade geloof ik. Moet ik even gaan navragen en regelen, maar dan weet je in ieder geval waarom er geen snelle reactie komt :'( 8)

Andere oplossingen zijn in de tussentijd ook welkom, voor het geval bovenstaand niet in orde komt...

  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

mikekiwi schreef op dinsdag 27 juli 2010 @ 16:03:
Jeetje, dat ziet er goed uit! Maar..ik kan het helaas niet gebruiken (heb ik weer). SP3 op XP is nodig om Powershell te installeren en die SP3 heb ik niet. 't Is mijn werkpc overigens, we gaan over een niet al te lang tijdje naar Win7, maar tot die tijd even geen upgrade geloof ik. Moet ik even gaan navragen en regelen, maar dan weet je in ieder geval waarom er geen snelle reactie komt :'( 8)

Andere oplossingen zijn in de tussentijd ook welkom, voor het geval bovenstaand niet in orde komt...
WXP zonder SP3? :o Ik ben sprakeloos...

  • mikekiwi
  • Registratie: Maart 2004
  • Laatst online: 24-11 19:08
YellowOnline schreef op dinsdag 27 juli 2010 @ 16:08:
[...]


WXP zonder SP3? :o Ik ben sprakeloos...
Eh..tja...daar kan ik nu ook even niets aan doen :X O-)

  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim fso: set fso = CreateObject("Scripting.FileSystemObject")
Dim fldr: Set fldr = fso.GetFolder(<map met alle CSV>)
Dim fl
Dim sContent
Dim txtStr

For Each fl in fldr.Files
  Set txtStr = fl.OpenAsTextStream(1, -2)
  Do While Not txtStr.AtEndOfStream
    sContent = sContent & fl.name & ";" & txtStr.ReadLine() & VbCrLf
  Loop
  txtStr.Close
  Set txtStr = fl.OpenAsTextStream(2, -2)
  txtStr.Write(sContent)
  txtStr.Close
  sContent = ""
Next


Niet getest ...
edit:

bugfix

[ Voor 4% gewijzigd door Big Womly op 28-07-2010 11:13 ]

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Ik weet niet hoeveel mikekiwi er vanaf weet, maar misschien nog vermelden dat je dit uitvoert via CSCRIPT.EXE (dat wél op een WXP SP2 staat).

[ Voor 45% gewijzigd door YellowOnline op 27-07-2010 18:03 ]


  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

YellowOnline schreef op dinsdag 27 juli 2010 @ 16:22:
[...]


Ik weet niet hoeveel mikekiwi er vanaf weet, maar misschien nog vermelden dat je dit uitvoert via CSCRIPT.EXE (dat wél ook op een WXP SP2 staat).
In een *.vbs file plakken en op dubbelklikken, dan zal WSCRIPT.EXE dat wel voor je uitvoeren. Dat moet volgens mij ook werken ;)

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • YellowOnline
  • Registratie: Januari 2005
  • Laatst online: 28-03-2023

YellowOnline

BEATI PAVPERES SPIRITV

Big Womly schreef op dinsdag 27 juli 2010 @ 16:25:
[...]


In een *.vbs file plakken en op dubbelklikken, dan zal WSCRIPT.EXE dat wel voor je uitvoeren. Dat moet volgens mij ook werken ;)
Pff, die moderne mensen die alles vanin een GUI doen :p

  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

YellowOnline schreef op dinsdag 27 juli 2010 @ 16:36:
[...]


Pff, die moderne mensen die alles vanin een GUI doen :p
Pff, die wannabe ITers die alles op de moeilijke en lange manier doen. Wees toch eens lui :P

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • mikekiwi
  • Registratie: Maart 2004
  • Laatst online: 24-11 19:08
Hi there, geen ruziemaken...Dank O grote Womly voor dit stukje programmeerproza!

Hoe ik een VB-scriptje moet runnen is mij niet onbekend. Na wat aanloopprobleempjes met het invoeren van het juiste pad en de benodigde (dubbele) quotes, loop ik nu tegen volgende foutmelding aan.

Afbeeldingslocatie: http://img.photobucket.com/albums/v645/mikekiwi/diversen/vberror1.jpg

Ik kan hier niet veel mee; weet welk stukje het is, maar heb te weinig kennis om dit op te lossen. Een idee wat er mis kan zijn?

  • alt-92
  • Registratie: Maart 2000
  • Niet online

alt-92

ye olde farte

Visual Basic:
1
 t.ReadLine

moet
Visual Basic:
1
txtStr.ReadLine


Zijn.

Scripts debuggen is op zich niet lastig.
Als je nergens een variable genaamd t hebt gedefinieerd is de logische stap om te kijken wat er dan wel aan variabelen beschikbaar is - kans op typo is altijd aanwezig.

Je errorcode is ook googlebaar: [google=vbscript error 800a01a8]

[ Voor 5% gewijzigd door alt-92 op 27-07-2010 18:47 ]

ik heb een 864 GB floppydrive! - certified prutser - the social skills of a thermonuclear device


  • mikekiwi
  • Registratie: Maart 2004
  • Laatst online: 24-11 19:08
Dank voor je hulp, het werkt! op een mapje met een paar kleine bestanden razendsnel, een map met wat meer en grotere bestanden heb ik nog niet "af" kunnen krijgen (250 files,300mb in totaal), maar dat is een kwestie van geduld denk ik.
Dit is een zeer fijne stap vooruit, hartelijk dank voor het meedenken allemaal!

  • Big Womly
  • Registratie: Oktober 2007
  • Laatst online: 01-09 13:39

Big Womly

Live forever, or die trying

alt-92 schreef op dinsdag 27 juli 2010 @ 18:47:
Visual Basic:
1
 t.ReadLine

moet
Visual Basic:
1
txtStr.ReadLine


Zijn.

Scripts debuggen is op zich niet lastig.
Als je nergens een variable genaamd t hebt gedefinieerd is de logische stap om te kijken wat er dan wel aan variabelen beschikbaar is - kans op typo is altijd aanwezig.

Je errorcode is ook googlebaar: [google=vbscript error 800a01a8]
My bad! Heb'm in het script gefixed.
mikekiwi schreef op woensdag 28 juli 2010 @ 09:08:
Dank voor je hulp, het werkt! op een mapje met een paar kleine bestanden razendsnel, een map met wat meer en grotere bestanden heb ik nog niet "af" kunnen krijgen (250 files,300mb in totaal), maar dat is een kwestie van geduld denk ik.
Dit is een zeer fijne stap vooruit, hartelijk dank voor het meedenken allemaal!
Als je wil weten wanneer die gedaan is, zet er dan op't einde nog even dit bij:
code:
1
MsgBox "All done!"


Nog iets wat ik net zie. sContent wordt nooit leeggemaakt, dus bij file 2 gaat de content van file 1 er ook nog inzitten.
Heb het scriptje hierboven aangepast.

[ Voor 7% gewijzigd door Big Womly op 28-07-2010 11:13 ]

When you talk to God it's called prayer, but when God talks to you it's called schizophrenia


  • mikekiwi
  • Registratie: Maart 2004
  • Laatst online: 24-11 19:08
Dank voor deze update!

Doet het ook een stuk sneller en de melding aan het einde is ook toegevoegd, idd praktisch.

Hartelijk dank voor je hulp!
Pagina: 1