Ir para conteúdo
Fórum Script Brasil
  • 0

Importando dados de um arquivo de texto simples


Iniraeril

Pergunta

Primeiramente gostaria de saber se é aqui que posso postar uma duvida, e desde já agradeço por ter acessado este tópico!

Bom minha duvida é a seguinte, eu tenho um arquivo de texto com dados separados por ";" porem esse documento tem um cabeçalho, porem não é simplesmente pular este cabeçalho, alem de pular ele eu preciso extrair alguns dados deles, e alguns serão descartados, alem disso eu preciso extrair do nome do arquivo duas informações, então gostaria de saber se tem como eu tratar esses dados sem ter que criar um aplicativo, somente usando o SQLSERVER e suas ferramentas e consultas SQL, se existir um metodo gostaria que me fosse indicado a busca de algum ou postado uma solução satisfatoria!

Informo que disponho do aplicativo SQLSERVER 2000, SQLSERVER 2005 e SQLSERVER 2008, por tanto não é necessario ficar preso a uma unica versão.

Grato;

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Amigo.

Tem como fazer as implementações que precisa. Vai depender qual a versão do SQL: 2000 - DTS; 2005 - SSIS.

Postei uma resposta a pouco tempo sobre este assunto.

Para fazer as transformações nos dados do TXT, o interessante seria importar tudo pro SQL e lá realizar as alterações.

Abaixo tem um link com um exemplo que postei em outro post. Dê uma pesquisada aí... :.)

http://docs.google.com/View?docID=0ATvXwxK...atest&hgd=1

Achei o link no fórum:

http://scriptbrasil.com.br/forum/index.php?showtopic=143994

Link para o comentário
Compartilhar em outros sites

  • 0

Cara muito obrigado,

me servio muito bem, me desculpe a demora para responder, mas é que to lotado de serviços da facul, e esse é um serviço que to tirando por fora.... xD

porem estou com mais uma problema aqui;

tenho uma coluna preenchida com dados da seguinte maneira:

|---------------------------------------|

|Coluna 1 |

|---------------------------------------|

|Serviço : Data inicial a Data final |

|Serviço |

|Serviço : Data inicial a Data final |

|Serviço : Data inicial a Data final |

|Serviço : Data inicial a Data final |

|Serviço : Data inicial a Data final |

|Serviço |

|Serviço |

|---------------------------------------|

ou seja nessa coluna são dados diferentes mas seguem um certo padrão, da seguinte maneira, se for um tipo serviço vai ter data inicial e final, se não, não havera a mesma, porem a unica coisa que eu quero é somente separar os regitros da coluna, sendo que o delimitador será o ":", ou seja, será uma coluna antes do ":" e outra coluna depois do ":", andei lendo alguns foruns, mas acabei não axando um resultado satisfatorio, já que só axei para MySQL, e foi um tanto diferente.

O que eu gostaria na verdade é de conhecer algum comando para executar essa operação. ou algum jeito que tornasse mais facil a minha busca, já que estou procurando por "Divir uma coluna por delimitador"...

desde já grato

e até mais

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Amigo. Estava viajando e não deu pra responder antes... :.)

Uma dúvida: estes dados já se encontram no SQL?

Se já estiverem na Base, pode-se utilizar a função substring para dividir os dados. Como você falou q os dados seguem um certo padrão, fica mais fácil a implementação.

Segue abaixo um exemplo com as informações q você postou. Espero q ajude!! Se não for isso, posta ai!! :.)

create table #tmp (Dados varchar(100), Data varchar(100))

insert into #tmp (Dados) values ('Serviço : Data inicial a Data final')

insert into #tmp (Dados) values ('Serviço')

insert into #tmp (Dados) values ('Serviço : Data inicial a Data final')

insert into #tmp (Dados) values ('Serviço : Data inicial a Data final')

insert into #tmp (Dados) values ('Serviço : Data inicial a Data final')

insert into #tmp (Dados) values ('Serviço : Data inicial a Data final')

insert into #tmp (Dados) values ('Serviço')

insert into #tmp (Dados) values ('Serviço')

select * from #tmp

update #tmp set data=(substring(dados, 11, 100))

select * from #tmp

Mas se você quiser utilizar o delimitador ":", você terá q o encontrar na string (a função charindex retorna a posição em q o caracter procurado está na string). A partir dai, pega esta posição e utiliza o substring...

Link para o comentário
Compartilhar em outros sites

  • 0

obrigado pela resposta,

mas não é bem isso não tipo exemplifiquei mal... me desculpe...

é o seguinte...

tenho a coluna la... que já esta no SQL... já esta em uma tabela...

mas os registros, esse "serviço" que coloquei representa uma variavel, ou seja, pode ser "Ligação local", "DDI", "DDD AM", e depois disso vem o ":" vem um outra coisa...

assim:

|coluna1 |

|------------------------------------------------|

|Ligação Local : 20/10/2009 - 20/10/2009 |

|DDI : 22/10/2009 - 22/10/2009 |

|DDD AM|

|Ligação VIVO : 15/12/2009|

|------------------------------------------------|

e eu preciso usar o ":" como separador para duas coluas!

ficaria assim.

|coluna1|

|--------------------|

|Ligação Local :|

|DDI :|

|DDD AM :|

|Ligação VIVO :|

|---------------------|

|coluna2|

|-----------------------------|

|20/10/2009 - 20/10/2009|

|22/10/2009 - 22/10/2009|

|

|15/12/2009|

|-----------------------------|

axo que agora o exemplo ficou mais nitido

desde já agradeço

e muito obrigado pela atenção

um abração e até mais!

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Amigo.

Ok. A lógica fica a mesma, mas você terá q utilizar a função "charindex" para encontrar o marcador ":".

Fiz um exemplo como o lá de cima. Pra entender, coloquei comentários no q cada sintaxe faz. Copia, cola e roda no SQL, beleza? Qualquer dúvida, posta aí...

create table #tmp (Dados varchar(100), Data varchar(100))

insert into #tmp (Dados) values ('Ligação Local : 20/10/2009 - 20/10/2009')

insert into #tmp (Dados) values ('DDI : 22/10/2009 - 22/10/2009')

insert into #tmp (Dados) values ('DDD AM')

insert into #tmp (Dados) values ('Ligação VIVO : 15/12/2009')

select * from #tmp

-- Sintaxe ltrim --> retirar espaços em branco na esquerda

-- Se quiser retirar espaços em branco na direita, rtrim

-- Sintaxe charindex --> encontra a posição do ":" na string. Se tiver dois ":", a função retorna a posição

-- do primeiro ":" q encontrar.

update #tmp set data=ltrim((substring(dados, (charindex (':', Dados) + 1), 100)))

-- Caso o SQL não encontre o ":", ele retorna zero na posição. Sendo assim, ele copia todos os dados

-- da coluna Dados para a coluna Data. Caso as duas sejam iguais, eu updato nulo.

update #tmp set Data=null where Dados=Data

select * from #tmp

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...