Τα γενικά αντί προλόγου:
Έχω ένα πρόγραμμα το οποίο εκτελεί ένα πλήθος πράξεων αφού πάρει για
στοιχεία εισόδου ένα πλήθος μεταβλητών τα οποία τα διαβάζει από ένα
αρχείο .txt.
Το πρόβλημα:
Το αρχείο .txt περιέχει δεκαδικούς αριθμούς. Σε μένα το πρόγραμμα
έτρεχε κανονικά. Σε άλλον υπολογιστή όμως έβγαζε σφάλματα. Τελικά ήταν
θέμα Τοπικών Ρυθμίσεων (Πίνακας ελέγχου > Τοπικές Ρυθμίσεις) όπου
(πατώντας Προσαρμογή) όρισα το χαρακτήρα της υποδιαστολής από "," σε
"." και μετά όλα καλά.
Η ερώτηση:
Μπορώ να γνωρίζω (σε χρόνο εκτέλεσης) από κάποια σταθερά ίσως (π.χ.
vbDecimalPoint) ποια είναι η ρύθμιση του υπολογιστή στον οποίο τρέχει
το πρόγραμμα;
Το συγκεκριμένο πρόβλημα ίσως μπορεί να ξεπεραστεί με μία διαφορετική
αντιμετώπιση χωρίς να έχω την απάντηση στην παραπάνω ερώτηση (δείτε την
παρακάτω πατέντα) αλλά βρέθηκα μπροστά σε ένα πρόβλημα το οποίο με
έκανε να αναθεωρήσω κάποιες σειρές κώδικα που έχω γράψει και σε άλλα
προγράμματα στα οποία δεν είχε τύχει μέχρι τώρα να εμφανιστεί κάτι
ανάλογο. Γι αυτό και θα ήθελα την απάντηση στη συγκεκριμένη ερώτηση.
Κατά τα άλλα, φυσικά, κάθε πρόταση ευπρόσδεκτη.
Η πατέντα:
Στο αρχείο .txt και πριν από τα δεδομένα να υπάρχει η γραμμή "3,1415"
και στο άνοιγμα του αρχείου ο κώδικας να διαβάζει την γραμμή, να την
τοποθετεί π.χ. στη μεταβλητή CurLine και στη συνέχεια:
If Val(CurLine) = 3,1415 Then
DecPt = ","
Else 'Που σε αυτήν την περίπτωση μάλλον θα είναι 3
DecPt = "."
End If
Ευχαριστώ εκ των προτέρων
Παντελής
-------------------------------------------------------------
Edit:
Η κατά τα άλλα αστεία πατέντα με οδήγησε σε κάποια ενδιαφέροντα στοιχεία. Δοκίμασα κάποια πράγματα και βρήκα:
Το Val("3,14") επιστρέφει πάντα 3 ανεξαρτήτως τοπικών ρυθμίσεων
Το Val("3.14") επιστρέφει 3,14 ή 3.14 ανάλογα με τις τοπικές ρυθμίσεις.
Δηλαδή οι τοπικές ρυθμίσεις δεν επηρρεάζουν την είσοδο αλλά την έξοδο; Και γιατί είχα πρόβλημα με την είσοδο των δεδομένων;
Σκέφτηκα λοιπόν το αποτέλεσμα του Val("3.14") να το εκμεταλευτώ εφόσον αυτό εξαρτάται από τις τοπικές ρυθμίσεις.
Το Str(Val("3.14")) επιστρέφει πάντα "3.14" (με το κενό μπροστά αντί του προσήμου).
Και τελικά αυτό που έδωσε τη λύση: Το Format(Val("3.14")) επιστρέφει
αλφαριθμητικά "3,14" ή "3.14" ανάλογα με τις ρυθμίσεις.
Δηλαδή η γραμμή
DecPt = Mid(Format(Val("3.14")), 2, 1)
επιστρέφει στο DecPt το χαρακτήρα της υποδιαστολής σύμφωνα με την τοπική ρύθμιση.
Να θεωρήσω ότι το πρόβλημα λύθηκε; Κάτι πιο δόκιμο; Ένα "Ναι μεν, αλλά...";