Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω μια ΒΔ σε xls οπου στο πεδιο ημνια_γεν εμφανζει τις εγγραφες ως εξης:

17 Jan, 62              ...........με format  κειμενο.

 

Προσπαθησα με το excel και με την access να το αλλαξω, αλλα δεν γινεται.

 

Σκοπός μου ειναι να φέρω το πεδιο ημνια_γεν σε μια μορφη ώστε να μπορω να χρησιμοποιησω φιλτρα.

 

 

 

Υπάρχει τρόπος?

Δημοσ.

Βασικά πρέπει να κάνει κανείς μετατροπή.

Αυτό παίζει όταν έχουμε γλώσσα ελληνικά

=DATEVALUE("17 ιαν, 62")

και παίζει αυτό που έχει αποθηκευτεί με γλώσσα στα αγγλικά. 

 

δες εδώ:

http://superuser.com/questions/730371/how-to-prevent-excel-to-use-the-os-regional-settings-for-date-patterns-in-formul

Δημοσ.

Θέλεις να γίνει αυτόματα το "17 January 1962" σε "17/01/1962"?

Θέλω να το ¨διαβαζει¨ σαν ημνια ωστε να μπορω να βαλω φιλτρο.

Τωρα δεν το αναγνωριζει καν....

Βασικά πρέπει να κάνει κανείς μετατροπή.

Αυτό παίζει όταν έχουμε γλώσσα ελληνικά

=DATEVALUE("17 ιαν, 62")

και παίζει αυτό που έχει αποθηκευτεί με γλώσσα στα αγγλικά. 

 

δες εδώ:

http://superuser.com/questions/730371/how-to-prevent-excel-to-use-the-os-regional-settings-for-date-patterns-in-formul

Την DATEVALUE την εχω δοκιμασει. Δεν μου δινει λύση.

Αυτο το link που μου δινεις, επισης δε μου εδωσε λυση.

Δημοσ. (επεξεργασμένο)

Έχω μια ΒΔ σε xls οπου στο πεδιο ημνια_γεν εμφανζει τις εγγραφες ως εξης:

17 Jan, 62              ...........με format  κειμενο.

 

Προσπαθησα με το excel και με την access να το αλλαξω, αλλα δεν γινεται.

 

Σκοπός μου ειναι να φέρω το πεδιο ημνια_γεν σε μια μορφη ώστε να μπορω να χρησιμοποιησω φιλτρα.

 

 

 

Υπάρχει τρόπος?

Αφού είναι σε .xlx:

 

- Κάνεις export το αρχείο σε csv.

- Το κάνεις parse με csv reader από python

- Αλλάζεις την ημερομηνία να φαίνεται όπως θες

- Αντικαθιστάς την στήλη του csv με τις νέες τιμές

- Σώζεις σε csv

- Το κάνεις import από excel και το σώζεις σε .xlx

 

 

Υ.Γ. Γίνεται με πολλές γλώσσες. Θαρρώ πως με Python θα είναι το πιο εύκολα υλοποιήσιμο ή at least αυτό ισχύει για εμένα.

Υ.Γ.2 Με python θα έχεις κάτι σαν:

 

months_strings = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']

def parse_date(old_date):
  """ Από 17 Jan, 65 επιστρέφει 17/01/65 """
  return old_date.split(' ')[0]+'/'+str(months_string.index(old_date.split(',')[0].split(' ')[-1]))+'/'+old_date.split(',')[-1]

import csv
import itertools

f_name, new_f_name = 'my_csv.csv', 'my_new_csv.csv'

with open(f_name, 'rb') as f:
  lines = csv.reader(f)

with open(new_f_name, 'wb') as f:
  csv_writer = csv.writer(f)
  [csv_writer.writerow(line2) for line2 in [list(itertools.chain(*[line1[:-1], parse_date(line1[-1])) for line1 in lines]]
και είσαι έτοιμος. εάν αλλάξεις λίγο την parse_date θα μπορείς να κάνεις ό,τι θέλεις. Όλα τα παραπάνω με τη προϋπόθεση ότι η ημερομηνία είναι το τελευταίο column του csv. Επεξ/σία από groot
  • Like 1
Δημοσ.

Και εάν έχεις πολλά αρχεία, βάλε τα σε έναν φάκελο, όρισε το προηγούμενο σαν

 

def the_csv_changing(the_dir, original_csv_name):
  "" Εδώ βάζεις τον κώδικα. Άλλαξε λίγο τα file names για να είσαι ΟΚ """
  pass
και μετά μπορείς να κάνεις:

 

import os

my_dir='the_dir_with_files'

[the_csv_changing(my_dir, a_file) for a_file in [a_dir for a_dir in os.listdir(my_dir)]]
Δηλαδή, όλο μαζί γίνεται:

 

import csv
import itertools
import os 

months_strings = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']
my_dir='the_dir_with_files'

def parse_date(old_date):
  """ Από 17 Jan, 65 επιστρέφει 17/01/65 """
  return old_date.split(' ')[0]+'/'+str(months_string.index(old_date.split(',')[0].split(' ')[-1]))+'/'+old_date.split(',')[-1]


def the_csv_changing(the_dir, original_file_name, prefix_for_new_file='new_'):
  with open(os.path.join(the_dir, original_file_name), 'rb') as f:
    lines = csv.reader(f)

  with open(os.path.join(the_dir, prefix_for_new_file + original_file_name), 'wb') as f:
    csv_writer = csv.writer(f)
    [csv_writer.writerow(line2) for line2 in [list(itertools.chain(*[line1[:-1], parse_date(line1[-1])) for line1 in lines]]


def main():
  [the_csv_changing(my_dir, a_file) for a_file in [a_dir for a_dir in os.listdir(my_dir)]]


if __name__ == 'main':
  main()

# EOF

Και είσαι έτοιμος.

 

Και εάν είναι και πολλά files, πετάς και ένα multiprocessing.pool με ένα apply_async ή map και είσαι ΟΚ σε καλό χρόνο.

 

Υ.Γ. Κώδικας εντελώς untested... use it at your own risk.

Υ.Γ.2 Πόσες γραμμές; 10; 15 max;

Υ.Γ.3 με την προϋπόθεση ότι το dir που έχεις τα csv files είναι στο ίδιο επίπεδο με το αρχείο κώδικα και τα files είναι χύμα μέσα.

Υ.Γ.4 14 γραμμές χωρίς τα imports, 17 με τα imports

  • Like 1
Δημοσ.

Έβαλα εδώ μια λύση μέσα από το excel

στο F2 έχουμε το νούμερο το DATEVALUE που βγαίνει όπως θέλουμε!

φτιάξε το πίνακα αντιστοιχιών μόνο σωστά (με κεφαλαίο το πρώτο γράμμα ή μικρό ανάλογα πως το έχει γραμμένο στο αρχείο σου

 

Περιγράφω την ιδέα: Βρήκα πρώτα από ποια θέση θα βγάλω τον μήνα! Το μήκος είναι 10 χαρακτήρες και αφαιρώ 7, Μπορεί η μέρα να παίζει ένα ή δυο ψηφία, αλλά από δεξιά είμαστε Οκ. Αφού σιγουρέψουμε τη θέση με μέτρηση από δεξιά, τότε κάνουμε εξαγωγή το Jan, μετά με Vlookup παίρνουμε το Ιαν  και κάνουμε αλλαγή το jan μετά το DateValue δουλεύει.

Άρα μετά ένα απλό copy (βάλει στο Lookup τον πίνακα με απόλυτους δείκτες (βάζεις το $ μπροστά) και είσαι οκ,

 

Το Vlookup το μαθαίνουν στο φροντιστήριο όλα τα παιδιά για το βασικό πτυχίο (τέτοιες δουλειές κάνω)

 

https://drive.google.com/file/d/0BwSrrDW66vvvNi1VN1ZtVHFyWFU/view?usp=sharing

Δημοσ.

Έβαλα εδώ μια λύση μέσα από το excel

στο F2 έχουμε το νούμερο το DATEVALUE που βγαίνει όπως θέλουμε!

φτιάξε το πίνακα αντιστοιχιών μόνο σωστά (με κεφαλαίο το πρώτο γράμμα ή μικρό ανάλογα πως το έχει γραμμένο στο αρχείο σου

 

Περιγράφω την ιδέα: Βρήκα πρώτα από ποια θέση θα βγάλω τον μήνα! Το μήκος είναι 10 χαρακτήρες και αφαιρώ 7, Μπορεί η μέρα να παίζει ένα ή δυο ψηφία, αλλά από δεξιά είμαστε Οκ. Αφού σιγουρέψουμε τη θέση με μέτρηση από δεξιά, τότε κάνουμε εξαγωγή το Jan, μετά με Vlookup παίρνουμε το Ιαν  και κάνουμε αλλαγή το jan μετά το DateValue δουλεύει.

Άρα μετά ένα απλό copy (βάλει στο Lookup τον πίνακα με απόλυτους δείκτες (βάζεις το $ μπροστά) και είσαι οκ,

 

Το Vlookup το μαθαίνουν στο φροντιστήριο όλα τα παιδιά για το βασικό πτυχίο (τέτοιες δουλειές κάνω)

 

https://drive.google.com/file/d/0BwSrrDW66vvvNi1VN1ZtVHFyWFU/view?usp=sharing

 

Σε ευχαριστώ πολύ!!

Δουλεύει μια χαρά.....

  • Like 1
Δημοσ.

:-D

 

(βασικές γνώσεις από Basic...συν μια ιδέα ecxel, και θέληση να τα βάλουμε με το θηρίο, αυτή είναι η συνταγή)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...