Condividi:        

Delimitatore Tab+Spazio

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Re: Delimitatore Tab+Spazio

Postdi Flash30005 » 30/06/12 18:41

Se ti riferisci alla colonna B "Destinazione" li ho trovati anche nel file "standardizzato"...
Aluni campi sono più lunghi di oltre 3 caratteri rispetto a tutti gli altri
es.: l'Id "103989" ha la dicitura "SRL" nel campo C anche se lo apri con Notepad
(trovi anche "straordinaria" in terza colonna , vedi ID "103298").

Penso che meglio di così....
ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Sponsor
 

Re: Delimitatore Tab+Spazio

Postdi Black.Jack » 01/07/12 13:09

Ciao,


aggiorno la macro con degli accorgimenti che rendono il risultato ancora più preciso.

addirittura si riesce a mantenere il ciclo e i conteggi, senza pendere contromisure, fino alla
quarta colonna.

Rimango dell'opinione che si debba però gestire l'indentatura controllando le differenti lunghezze associate ai tabs e poi importare con un semplice delimitatore a lunghezze fisse.

Codice: Seleziona tutto
Public MR As String, col As Long, campo As String, LC As Integer

    Sub ImportaTesto()
    Cells.Clear
   
   
    Perc = ThisWorkbook.Path & "\"
    Open Perc & "elenco_cli_ind_destinazione.txt" For Input As #1
        Do Until EOF(1)
            Line Input #1, Riga
            col = 0
            MR = Riga
            If Mid(MR, 1, 1) <> "=" Then
                UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row + 1
                LC = 11
                Call Riempi_campo
                    Range("A" & UR).Value = Trim(campo)
                LC = 40
                Call Riempi_campo
                    Range("B" & UR).Value = Trim(campo)
                LC = 40
                Call Riempi_campo
                    Range("C" & UR).Value = Trim(campo)
                LC = 40
                Call Riempi_campo
                    Range("D" & UR).Value = Trim(campo)
                LC = 16
                Call Riempi_campo2
                    Range("E" & UR).NumberFormat = "@"
                    Range("E" & UR).Value = Right(Trim(campo), 9)
                   
                    Dim pippo1 As String
                    Dim pippo2 As String
                    Dim pippo3 As Integer
                   
                    pippo3 = Len(Range("E" & UR).Value)
                    pippo1 = Left(Range("E" & UR).Value, 2)
                    pippo2 = Right(Range("D" & UR), 2)
                   
                    If pippo1 = pippo2 And pippo3 > 5 Then
                        Dim Lenghtval As Integer
                        If Range("E" & UR).Value <> 0 Then
                        Lenghtval = Len(Range("E" & UR).Value) - 2
                        Range("E" & UR).Value = Right(Range("E" & UR), Lenghtval)
                        End If
                        pippo3 = 0
                    End If
                     
                    pippo1 = Left(Range("E" & UR).Value, 1)
                    pippo2 = Right(Range("D" & UR), 1)
                   
                    If pippo1 = pippo2 And pippo3 > 5 Then
                        If Range("E" & UR).Value <> 0 Then
                        Lenghtval = Len(Range("E" & UR).Value) - 1
                         Range("E" & UR).Value = Right(Range("E" & UR), Lenghtval)
                        End If
                        pippo3 = 0
                    End If
                   
                   
                LC = 40
                Call Riempi_campo2
                    Range("F" & UR).Value = Trim(campo)
                LC = 13
                Call Riempi_campo3
                    Range("G" & UR).Value = Trim(campo)
                LC = 14
                Call Riempi_campo3
                    Range("H" & UR).Value = Trim(campo)
            End If
        Loop
    Close #1
    End Sub

    Private Sub Riempi_campo()
   Dim a As Integer
   Dim b As Integer
   a = 0
   b = 0
    Virg = " "
    campo = ""
        For Car = 0 To LC
            col = col + 1
            Virg = Mid(MR, col, 1)
           
            If Virg = Chr(32) And col > 12 And Trim(campo) = "" Then
               a = a + 1
            End If
            If Virg = Chr(9) Then
                Car = Car + 8
               
            Else
                campo = campo & Mid(MR, col, 1)
               
            End If
        Next Car
       If Trim(campo) <> "" And col > 12 And a > 0 And Trim(cammpo) <> "CAP" Then
       
        campo = campo & Mid(MR, col + 1, a)
        End If
         
    End Sub
 Private Sub Riempi_campo2()
Virg = " "
campo = ""
    For Car = 1 To LC
         col = col + 1
        Virg = Mid(MR, col, 1)
        If Virg = Chr(9) Then
            Car = Car + 8
        Else
            campo = campo & Mid(MR, col, 1)
        End If
    Next Car
End Sub
     Private Sub Riempi_campo3()
Virg = " "
campo = ""
    For Car = 1 To LC
         col = col + 1
        Virg = Mid(MR, col, 1)
        If Virg = Chr(9) Then
            Car = Car + 5
        Else
            campo = campo & Mid(MR, col, 1)
        End If
    Next Car
End Sub



Per tutti: un sentito ringraziamento, e pongo con gioia la parola FINE a questo ennesimo puzzle, secondo me oramai risolto, dato che consente benissimo di lavorare! ;)
Win7 + Office 2010 Ita
Xp + Office 2010 Ita
Black.Jack
Utente Junior
 
Post: 93
Iscritto il: 23/06/10 08:40

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Delimitatore Tab+Spazio":


Chi c’è in linea

Visitano il forum: papiriof e 72 ospiti