Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

VB Script και κολπάκια, Excel macro, Word, Powerpoint, κτλ

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
smiley
Δημοσιεύσεις: 1382
Εγγραφή: 18 Μαρ 2005 14:02

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από smiley » 19 Μαρ 2008 22:58

Θέλω να επεξεργαστώ απλά αρχεία της μορφής .txt που το καθένα αποτελεί μια και μοναδική λίστα της ίδιας κλάσης δεδομένων για παράδειγμα το κάθε αρχείο περιέχει 5 στοιχεία που διαχωρίζονται με κόμμα ","

όπως για το αρχείο:

data1.txt περιέχει την λίστα
black,yes,10,oct,50

data2.txt περιέχει την λίστα
red,no,7,jun,22

θέλω σε αυτό τον τύπο αρχείον να μην υπάρχει το δεύτερο πεδίο λίστας που περιέχει τιμές yes ή no

Με λίγα λόγια στην έξοδο να πέρνουμε το εξής αποτέλεσμα:

το data1.txt περιέχει την λίστα
black,10,oct,50

το data2.txt περιέχει την λίστα
red,7,jun,22

..., ..., ..., ..., ...
..., ..., ..., ..., ...

..., ..., ..., ..., ...
κοκ.

Με τι λοσγισμικό μπορούμε να πετύχουμε το ζητούμενο.

Θυμάμε παλιά στο unix φτίαχναμε κάτι σκριπτάκια, vi, pipes κτλ.

Μήπως μπορεί ακόμα να γίνει αυτό στα Windows, Access, Excel

Tα αρχεία που θα λάβουν μέρος στην επεξεργασία θα βρίσκοναται όλα στον ίδιο κατάλογο.

Άβαταρ μέλους
Hermeia
Honorary Member
Δημοσιεύσεις: 987
Εγγραφή: 02 Αύγ 2004 00:14
Τοποθεσία: Αθήνα
Επικοινωνία:

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από Hermeia » 20 Μαρ 2008 02:13

στο XL πρέπει να γίνεται - όχι πο΄λύ εύκολα
πχ. κάνεις ένα "recording" ή όπως το λένε που να διαβάζει (όλα τα αρχεια στο φάκελο) και να τα βάζει σε γραμμές (μια γραμμη κάθε αρχείο, διαχωριστικό στήλης το κόμμα)
μετα να σβήσεις τη 2η στηλη ..
μετα (αυτό δεν ξερω πως.. αλλα πρέπει να εχει ένα τρόπο..)
να τα ξανα-extract σε .. διαφορετικό αρχείο κάθε γραμμή.

δεν ξερω απο access .. πιθανο να γινεται πιο εύκολα εκει (αν υποθέσουμε οτι ειναι db..)

(στα unix-οειδή ισχύουν όσα ξέρεις και αρκετά εργαλεία για φιλτράρισμα και batch επεξεργασίες αρχειων..)


καλη επιτυχία
Hermeia the InfoSharer
Η Γνώση είναι Δύναμη
Εικόνα

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από skeftomilos » 20 Μαρ 2008 05:04

Θα το έκανα με ένα Windows Script, σαν αυτό:

Smiley-Script.wsf

Κώδικας: Επιλογή όλων

<job>
  <script language="JScript">
    var fso = WScript.CreateObject&#40;'Scripting.FileSystemObject'&#41;
    var shell = WScript.CreateObject&#40;'WScript.Shell'&#41;

    var res = shell.Popup&#40;'Έναρξη;', 0, 'REPLACEMENTS', 4 + 32&#41; //Yes-No
    if &#40;res != 6&#41; WScript.Quit&#40;&#41;

    var cnt = 0
    for &#40;var e = new Enumerator&#40;fso.GetFolder&#40;'.'&#41;.Files&#41;; !e.atEnd&#40;&#41;; e.moveNext&#40;&#41;&#41; &#123;
      var file = e.item&#40;&#41;
      if &#40;fso.GetExtensionName&#40;file.Name&#41; == 'txt'&#41; &#123;
        var stream = fso.OpenTextFile&#40;file.Name, 1&#41;
        var source = stream.AtEndOfStream ? '' &#58; stream.ReadAll&#40;&#41;
        stream.Close&#40;&#41;
        source = source.replace&#40;/^&#40;.*?&#41;,&#40;.*?&#41;,&#40;.*?&#41;,&#40;.*?&#41;,&#40;.*?&#41;$/mg, '$1,$3,$4,$5'&#41;
        var stream = fso.OpenTextFile&#40;file.Name, 2, true&#41;
        stream.Write&#40;source&#41;
        stream.Close&#40;&#41;
        cnt++
      &#125;
    &#125;

    WScript.Echo&#40;'Done&#58; ' + cnt&#41;
  </script>
</job>
Θα έβαζα το script στο φάκελο με τα txt αρχεία, και θα το έτρεχα με διπλό κλικ.

smiley
Δημοσιεύσεις: 1382
Εγγραφή: 18 Μαρ 2005 14:02

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από smiley » 20 Μαρ 2008 07:09

Σας ευχαριστώ για όλες τις απαντήσεις σας... οπωσδήποτε κάτι θα μείνει σαν ιδέα από όλες...

Λοιπόν το δοκίμασα και όπως είπες τρέχει το script τέλεια...όπως τοποθέτησα το θέμα σαν διαχωριστή έδωσα τυχαία το "," όπως επίσης τυχαία των αριθμό των πεδίων.

Με λίγα λόγια υπήρχε ανάγκη να προσθέσω στην θέση πριν τον διαχωριστή ένα "\" ευτυχώς που το θυμήθηκα και δεν πήραν φλόγα τα μάτια μου :lol:

Με άρεσε το script skeptomile, θα το φυλάξω ως κόρη οφθαλμού και δεν είναι τυχαίο που το πόσταρες... εσένα είχα στο νού ότι τα παίζεις στα δάχτυλά σου τα regular expressions και τα σχετικά... Δουλειά που είναι να γίνει σε λιγότερο τους ενός λεπτού θα γινόταν με το χέρι το λίγοτερο σε μια βδομάδα μερονύκτιου μαζοχισμού και σίγουρα με κάποιες παραλείψεις... :pint:

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από cherouvim » 20 Μαρ 2008 08:29

skeftomilos έγραψε:Θα το έκανα με ένα Windows Script, σαν αυτό:
Ενδιαφέρον. Τι γλώσσα ακριβώς είναι αυτή και σε πια windows παίζει;

Άβαταρ μέλους
CyberCr33p
Honorary Member
Δημοσιεύσεις: 3195
Εγγραφή: 06 Νοέμ 1999 01:00
Τοποθεσία: Αθήνα
Επικοινωνία:

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από CyberCr33p » 20 Μαρ 2008 08:52

Πάντως σε Unix γίνεται με 1 γραμμή αυτό που ζητάς με χρήση της awk.

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από skeftomilos » 20 Μαρ 2008 15:56

@smiley: Το backslash είναι ειδικός χαρακτήρας και χρειάζεται escaping, τόσο μέσα στη regular expresion όσο και στο string αντικατάστασης:

Κώδικας: Επιλογή όλων

source = source.replace&#40;/^&#40;.*?&#41;\\&#40;.*?&#41;\\&#40;.*?&#41;\\&#40;.*?&#41;\\&#40;.*?&#41;$/mg, '$1\\$3\\$4\\$5'&#41;
Escaping σημαίνει ότι προστίθεται ένα δεύτερο backslash πιο πριν.

@cherouvim: Η γλώσσα είναι JScript, και παίζει σε όσα Windows έχουν εγκατεστημένη την JScript scripting engine (C:\WINDOWS\system32\jscript.dll), και τον Windows Scripting Host (C:\WINDOWS\system32\wscript.exe). Εγκαθίστανται αυτόματα με τα Windows 98 και έπειτα, αλλά παίζουν και σε Win 95 αν εγκατασταθεί o IΕ5.

- Windows Script Host

smiley
Δημοσιεύσεις: 1382
Εγγραφή: 18 Μαρ 2005 14:02

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από smiley » 20 Μαρ 2008 19:18

σωστό αυτό... μόνο που χρησιμοποίησα κάποιον άλλο ειδικό χαρακτήρα (ως διαχωριστή πεδίων) μετά από τον ειδικό χαρακτήρα Back slash "\" ο οποίος αναιρεί την ειδική σημασία κάποιου οποιουδήποτε ειδικού χαρακτήρα...

Κώδικας: Επιλογή όλων

source = source.replace&#40;/^&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;\|&#40;.*?&#41;$/mg, '$1|$2|$3|$4|$5|$6|$7|$8|$9|$10|$11|$12|$13|$14|$16|$17'&#41;
το script τρέχει... δεν προλαβαίνεις να πεις ok και μπορεί να σου έχει επεξεργαστεί ήδη χιλιάδες τέτοιων αρχείων :)

smiley
Δημοσιεύσεις: 1382
Εγγραφή: 18 Μαρ 2005 14:02

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από smiley » 06 Απρ 2008 11:53

που πρέπει να τροποποιηθεί το θαυμάσιο :kaloe: αυτό script ώστε για παράδειγμα στο 3ο πεδίο κάθε αρχείου να γίνετε αντικατάσταση του περιεχωμένου του με το όνομα του αρχείου και δίχως το .extension (.ext)

παράδειγμα:

data1.txt
a1,a2,a3,a4,a5

data2.txt
b1,b2,b3,b4,b5

...
...

dataΝ.txt
Ν1,Ν2,Ν3,Ν4,Ν5


μετά την επεξεργασία να παίρνουμε δηλαδή στην έξοδο:

data1.txt
a1,a2,data1,a4,a5

data2.txt
b1,b2,data2,b4,b5

...
...

dataN.txt
N1,N2,dataN,N4,N5

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από skeftomilos » 06 Απρ 2008 12:40

Αν ας πούμε το replacement string είναι:

Κώδικας: Επιλογή όλων

'$1,$2,$3,$4,$5'
...πρέπει να γίνει:

Κώδικας: Επιλογή όλων

'$1,$2,' + fso.GetBaseName&#40;file.Name&#41; + ',$4,$5'
Εικόνα :-)

smiley
Δημοσιεύσεις: 1382
Εγγραφή: 18 Μαρ 2005 14:02

Μαζική επεξαργασία αρχείων .txt προκαθορισμένης μορφής

Δημοσίευση από smiley » 06 Απρ 2008 12:57

ευχαριστώ skeftomile για όλα :lol: είχα κάνει δηλαδή δυο τρεις δοκιμές αλλά τα παράτησα για καλή μου τύχη πριν με φάει η πολύ δουλειά... το καλό το παληκάρι ξέρει κι άλλο μονοπάτι... τι νομίζατε? πως είμαστε χαζοί? δεν είμαστε όποιοι κι όποιοι :evil: έχουμε και διασυνδέσεις με τον skeftomilo :)

Απάντηση

Επιστροφή στο “Office, Excel, Word VB Scripts και Tips”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες