Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Μεταφορά txt αρχείου με αρνητικούς αριθμούς που έχουν το πρόσημο δεξιά

Îåêßíçóå áðü ôï ìÝëïò Filaretos. Τελευταία δημοσίευση από το μέλος Filaretos στις 22-04-2007, 17:58. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-04-2007, 12:53 30450

    Μεταφορά txt αρχείου με αρνητικούς αριθμούς που έχουν το πρόσημο δεξιά

    Έχω ένα text αρχείο που έχει μέσα διάφορα παραγωγικά στοιχεία.

    Κάποια από αυτά τα στοιχεία είναι αρνητικά νούμερα.

    Το πρόβλημα είναι ότι το format του αρνητικού αριθμού έχει το (-) από την δεξιά πλευρά.

    π.χ.
    ID         ;Customer         ; Value1        ;Value2
    F76P35 ;xxxxxxxxxxx       ;       211.202 ;        71.676-

     

    Προσπαθώ να περάσω αυτό το αρχείο με BULK INSERT σε έναν πίνακα και χτυπάει στους αρνητικούς αριθμούς γιατί προσπαθεί να περάσει text σε Integer.

     

    Η βάση που χρησιμοποιώ είναι SQL Server 2000

     

    Έχει κάποιος μια λύση για το πρόβλημα αυτό;

     

    Σημείωση :

    Όταν περνάω το txt αρχείο σε έναν πίνακα της Access δεν υπάρχει κανένα πρόβλημα και βλέπει κανονικά του αρνητικούς αριθμούς.


    Φιλάρετος Σεβαστιάδης.

    Albert Camus: Life is the sum of your choices.

  •  20-04-2007, 13:26 30457 σε απάντηση της 30450

    Απ: Μεταφορά txt αρχείου με αρνητικούς αριθμούς που έχουν το πρόσημο δεξιά

    Στην Access δηλαδή τους διαβάζει όντως ως αριθμούς ή ως text;
    "Μη σταματάς να αναζητάς αυτό που αγαπάς, ειδάλλως θα καταλήξεις να αγαπάς ό,τι βρίσκεις." (Αγνώστου)
  •  20-04-2007, 13:30 30458 σε απάντηση της 30457

    Απ: Μεταφορά txt αρχείου με αρνητικούς αριθμούς που έχουν το πρόσημο δεξιά

    PanPan:
    Στην Access δηλαδή τους διαβάζει όντως ως αριθμούς ή ως text;

    Ο αρνητικός αριθμός από το txt ¨πέφτει¨ σε ένα πεδίο long integer και το πρόσημο ¨περνάει¨  αυτόματα αριστερά από τον αριθμό.



    Φιλάρετος Σεβαστιάδης.

    Albert Camus: Life is the sum of your choices.

  •  21-04-2007, 18:24 30658 σε απάντηση της 30450

    Απ: Μεταφορά txt αρχείου με αρνητικούς αριθμούς που έχουν το πρόσημο δεξιά

    Επειδή δεν μπόρεσα να βρω κάτι ¨αυτόματο¨ έκανα το εξής :

    1. Περνάω τα δεδομένα του txt σε έναν προσωρινό πίνακα (τα πεδία του πίνακα είναι όλα nvarchar).

     

    2. Από τον προσωρινό πίνακα κάνω insert στον πίνακα που θέλω χρησιμοποιώντας μια function που έφτιαξα για να περνάει το πρόσημο από τα δεξιά στα αριστερά του αριθμού.

    Δηλαδή για κάθε πεδίο που κάνω Insert χρησιμοποιώ την function:

     

    CREATE Function [dbo].[fn_FixMinusNumber]

    (@MinusNumber as nvarchar(50))

    RETURNS nvarchar(50)

    BEGIN 

              IF RIGHT(RTRIM(@MinusNumber),1) ='-'

              BEGIN

                       SET @MinusNumber = '-' + LTRIM(REPLACE (@MinusNumber,'-',''))

              END

     

              RETURN RTRIM(LTRIM(@MinusNumber))

    END

     

     

    Δεν ξέρω αν είναι ο καλύτερος τρόπος αλλά δουλεύει μια χαρά.

     

    Οποιαδήποτε άλλη πρόταση είναι καλοδεχούμενη !!!!!!!!!!


    Φιλάρετος Σεβαστιάδης.

    Albert Camus: Life is the sum of your choices.

  •  22-04-2007, 13:04 30698 σε απάντηση της 30658

    Απ: Μεταφορά txt αρχείου με αρνητικούς αριθμούς που έχουν το πρόσημο δεξιά

    Βήμα 1: Δημιουργία view που απλά επιλέγει δεδομένα από τον πίνακα (έστω tbl1) στον οποίο θα γίνει το BULK INSERT.

    CREATE VIEW tbl1_view

    AS

    SELECT ID, Customer, CAST(Value1 AS VARCHAR(50)) AS Value1, CAST(Value2 AS VARCHAR(50)) AS Value2

    FROM tbl1

    Σημείωση:Η μετατροπή των Value1, Value2 σε VARCHAR είναι απαραίτητη για να γίνει εισαγωγή τιμών πχ. 123-

    Βήμα 2: Δημιουργία trigger στην view

    CREATE TRIGGER bulk_insert_tbl1_view
    ON tbl1_view
    INSTEAD OF INSERT

    AS

    INSERT INTO tbl1(ID, Customer, Value1, Value2)
    SELECT ID, Customer, SIGN(REVERSE(i.Value1)) * REPLACE (i.Value1,'-','') , SIGN(REVERSE(i.Value2)) * REPLACE (i.Value2,'-','')

    FROM inserted i

    Σημείωση: Είναι σημαντικό, ότι ο trigger ΔΕΝ κάνει εισαγωγή στην view αλλά ΣΤΟΝ ΠΙΝΑΚΑ ΑΠΕΥΘΕΙΑΣ!!!

    Βήμα 3: Κάνεις BULK INSERT στην view και οχι στον πίνακα επιλέγοντας FIRE_TRIGGERS .

    Αν προτίθεσαι να δοκιμάσεις την παραπάνω λύση, θα μπορούσες να μοιραστείς τις εντυπώσεις σου??

    --ΗΤΗ--

  •  22-04-2007, 17:58 30709 σε απάντηση της 30698

    Απ: Μεταφορά txt αρχείου με αρνητικούς αριθμούς που έχουν το πρόσημο δεξιά

    Ευχαριστώ.

    Θα το δοκιμάσω αύριο Δευτέρα και θα σου απαντήσω


    Φιλάρετος Σεβαστιάδης.

    Albert Camus: Life is the sum of your choices.

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems