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

importar txt


shelter

Pergunta

Boa galera aqui, um assunto se não sei se os amigos tem necessidades ( mais pode ter certesa que uma vai ter ) importar arquivo.

A forma mais normal é o txt.

Vamos ao meu assunto e que certamente será no futuro de um de você´s.

Tenho um arquivo txt separado por colunas qual seria a sintaxe para importar o mesmo para uma tabela do mysql.

por tabulação faço assim:

load data infiline " meuarquivo.txt" into table minhatabela;

como seria por coluna.

agradeço aos amigos...

Vamos levantar essa que certamente amanhã você terá necessidade deste assunto.

Valmir Lopes

Link para o comentário
Compartilhar em outros sites

16 respostass a esta questão

Posts Recomendados

  • 0
Vamos ao meu assunto e que certamente será no futuro de um de você´s.

Tenho um arquivo txt separado por colunas qual seria a sintaxe para importar o mesmo para uma tabela do mysql.

por tabulação faço assim:

load data infiline " meuarquivo.txt" into table minhatabela;

como seria por coluna.

Valmir, acredito que este seu novo tópico se refira ao mesmo assunto que o anterior: Load data infile (sem respostas)

Supondo que seja isto mesmo, aquele exemplo dá a entender que o delimitador de campos (colunas) seja o caracter " " (espaço) e, neste caso, há uma situação (coluna extra - em vermelho) que aparentemente não permitirá o uso deste método:

02/01/06 10:17AM 1 E1074 T10101 0122238644009 00:01'12

02/01/06 10:17AM 1 E1150 T10107 39776836 00:00'08

02/01/06 10:17AM 1 E1032 T10930 <I>3767 0'00 00:01'05 TR

02/01/06 10:17AM 1 E1015 T10119 22056915 00:00'14

...

MySQL não é minha especialidade mas, pelo que entendi do uso deste recurso (implementei algo similar), o número de colunas no arquivo de importação deve ser igual em cada linha (pelo menos no que diz respeito a delimitação).

Mas a título de auxílio, vou deixar aqui o código que testei, considerando:

- nome da tabela pabx;

- que são as colunas: Data(Date), Hora(Time), Situacao(varchar(1), Campo1(varchar(6)), Campo2(varchar(6)), Fone(13), Duracao(Time);

- suas colunas são delimitadas por " " (espaço);

- que a linha "anômala" foi retirada do arquivo.

load data infile "c:\\temp\\pabx.txt"

into table pabx

fields enclosed by ' ' terminated by ' ' escaped by ' '

(Data, @varTime, status, Cmp1, Cmp2, Fone, @varDuracao)

set Hora = cast(if(substring(@varTime, 6, 2)='PM', cast(substring(@varTime, 1, 5) as time)+cast('12:00' as time), cast(substring(@varTime, 1, 5) as time)) as time),

Duracao = cast(substring(@varDuracao, 1, 5)+substring(":", 1, 1)+substring(@varDuracao, 7, 2) as time);

Ref. LOAD DATA INFILE Syntax (site oficial MySQL)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

grande amigo muito obrigado pela sua ajuda, mais aqui estou revebendo o segunte erro quando executo o seu codigo:

1406 (22001): Data Too long for columm ' Campo1' At Row 1...

O amigo saberia me dizer aonde esta o erro.

Agrdeço muito a sua ajuda.

Um forte abraço e boa pascoa.

Valmir Lopes

Link para o comentário
Compartilhar em outros sites

  • 0
grande amigo muito obrigado pela sua ajuda, mais aqui estou revebendo o segunte erro quando executo o seu codigo:

1406 (22001): Data Too long for columm ' Campo1' At Row 1...

O amigo saberia me dizer aonde esta o erro.

shelter, a mensagem sugere que na tentativa de importação, o Campo1 tem tamanho maior que o reservado para ele na tabela.

Para obter um melhor auxílio (seja meu ou de qualquer outro colega), seria interessante que você:

- mencionasse o nome e tipo das colunas de sua tabela para qual os dados serão importados;

- pudesse colocar pelo menos esta linha inicial (row 1) reportada no erro;

- e a sequência de comandos para "load data infile ...".

É que fica difícil opnar sem saber com o que estamos tratando.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

boa irmão a sua ajuda esta me ajudando muito, pow qual o problema de hoje?

vou passar todo txt, este mesmo não tenho como mexer nele:

02/01/06 10:17AM 1 E1074  T10101 0122238644009            00:01'12              

02/01/06 10:17AM 1 E1150  T10107 39776836                 00:00'08              

02/01/06 10:17AM 1 E1032  T10930 <I>3767             0'00 00:01'05            TR

02/01/06 10:17AM 1 E1015  T10119 22056915                 00:00'14              

02/01/06 10:17AM 1 E1085  T10112 33846906                 00:00'57              

02/01/06 10:17AM 1 E1078  T10121 27250508                 00:00'05              

02/01/06 10:17AM 1 E1157  T10105 0123136376456            00:00'28              

02/01/06 10:17AM 1 E1076  T10122 22688525                 00:00'50              

********************************************************************************

Date     Time    T Ext    CO     Dial Number         Ring Duration Acct code  CC

********************************************************************************

02/01/06 10:18AM 1 E1187  T10914 <I>3767             0'00 00:04'01            TR

02/01/06 10:18AM 1 E1155  T10110 25087568                 00:00'03              

02/01/06 10:18AM 1 E1160  T10115 25911394                 00:01'41              

02/01/06 10:18AM 1 E1049  T10113 0122422444700            00:05'35              

02/01/06 10:18AM 1 E1077  T10901 0312292315985            00:01'27              

02/01/06 10:18AM 1 E1029  T10105 38667971                 00:00'12              

02/01/06 10:18AM 1 E1042  T10123 0122732455382            00:01'03              

02/01/06 10:18AM 1 E1089  T10101 0121633823995            00:00'28              

02/01/06 10:18AM 1 E1125  T10915 <I>3788             0'00 00:01'43            TR

02/01/06 10:18AM 1 E1090  T10125 34093043                 00:00'05              

02/01/06 10:18AM 1 E1056  T10126 24873812                 00:00'22              

02/01/06 10:18AM 1 E1123  T10114 0123134953075            00:01'12              

02/01/06 10:18AM 1 E1098  T10104 27996536                 00:00'47              

02/01/06 10:18AM 1 E1137  T10119 22630920                 00:00'22              

02/01/06 10:18AM 1 E1096  T10120 22540226                 00:00'24              

02/01/06 10:18AM 1 E1086  T10904 97624163                 00:02'06              

02/01/06 10:18AM 1 E1191  T10924 <I>3790             0'00 00:03'53            TR

02/01/06 10:18AM 1 E1079  T10109 0122422226974            00:03'26              

02/01/06 12:42PM 1 E1165  T20901 22601155                 00:00'08              

02/01/06 12:42PM 1 E1166  T20902 22605302                 00:00'08              

02/01/06 12:42PM 1 E1157  T10111 33632206                 00:00'12              

02/01/06 12:42PM 1 E1130  T10901 82346944                 00:04'28              

02/01/06 12:42PM 1 E1159  T10119 38608895                 00:07'00              

02/01/06 12:42PM 1 E1015  T10114 25705614                 00:00'01              

02/01/06 12:42PM 1 E1125  T10109 27102189                 00:00'01              

02/01/06 12:42PM 1 E1150  T10111 27859533                 00:00'05              

02/01/06 12:42PM 1 E1016  T10101 33940655                 00:00'30              

02/01/06 12:42PM 1 E1163  T10104 0122238229809            00:00'17

Quais os pontos que hoje tiram o meu sono:

1- o campo data o que que eu recebo é dd/mm/aa e formato do mysql é aa/mm/dd daí recebo erro.

2- este menu que vem aliatoriamente no arquivo, tenho que não gravar isso , pois se não da erro.

3- o outro é as colunas ring e CC são esporadicos mais preciso desta informação tb.

Esta parte que esta entre os asterisks seria o menu...

Po desde já muito obrigado pela ajuda.

Abraços

Valmir Lopes

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Valmir Lopes!

Vamos trabalhar como faziamos antigamente:

Primeiro, crie uma tabela temporária com um único atributo do tipo CHAR. Não pode ser VARCHAR pois este segundo tipo é variável enquanto o primeiro é fixo. (Precisamos dos espaços para achar todos os atributos.)

CREATE TEMPORARY TABLE tb (linha CHAR(80))ENGINE=MEMORY;
Se o arquivo texto a ser importado for muito grande, utilize uma tabela permanente em vez de uma temporária, com ENGINE=MYISAM. Segundo:Importe seu arquivo para a tabela temporária.
LOAD DATA INFILE "c:\\temp\\pabx.txt" INTO TABLE tb
Terceiro: Tratar a importação e colocá-la na tabela correta. O tratamento é feito atributo por atributo usando diversas funções do mysql.
12345678901234567890123456789012345678901234567890123456789012345678901234567890
Date     Time    T Ext    CO     Dial Number         Ring Duration Acct code  CC
02/01/06 10:18AM 1 E1187  T10914 <I>3767             0'00 00:04'01            TR
02/01/06 10:17AM 1 E1157  T10105 0123136376456            00:00'28
INSERT INTO pabx (Data, Hora, status, Cmp1, Cmp2, Fone, Duracao)
SELECT DATE(CONCAT(SUBSTRING(linha, 7, 2),'-',SUBSTRING(linha, 3, 2),'-20',SUBSTRING(linha, 1, 2)) AS Data, TIME(SUBSTRING(linha, 10, 5)) AS Hora, SUBSTRING(linha, 18, 1) AS status, SUBSTRING(linha, 20, 6) AS Cmp1, SUBSTRING(linha, 27, 6) AS Cmp2, SUBSTRING(linha, 34, 19) AS Fone, SUBSTRING(linha, 59, 8) AS Duracao) 
FROM tb
WHERE linha NOT LIKE "********%" OR linha NOT LIKE "               %" OR linha NOT LIKE "Date     Time%";
Quarto liberação de memória da tabela temporária:
DROP TEMPORARY TABLE tb

Link para o comentário
Compartilhar em outros sites

  • 0

caro Denis na boa?

Aqui estou recenbendo o seguinte erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS data,
TIME(SUBSTRING(linha, 10, 5)) AS hora)
FROM arquivo
WHERE linha NOT ' at line 2

O q será, agrdeço muito a sua ajuda.

Abraços .

Valmir Lopes

Link para o comentário
Compartilhar em outros sites

  • 0
caro Denis na boa?

Aqui estou recenbendo o seguinte erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS data,
TIME(SUBSTRING(linha, 10, 5)) AS hora)
FROM arquivo
WHERE linha NOT ' at line 2

O q será, agrdeço muito a sua ajuda.

Abraços .

Valmir Lopes

Oi, Valmir!

Este parêntese

hora)
Foi aberto onde? Passe o seu código, pois ele está diferente do que eu enviei no outro post.
Link para o comentário
Compartilhar em outros sites

  • 0

Denis amigo , desde já agrdeço a você ...

aqui estou executando o seguinte cod.

INSERT INTO import_atn (Data, Hora)
SELECT DATE(CONCAT(SUBSTRING(linha, 7, 2),'-',SUBSTRING(linha, 3, 2),'-20',SUBSTRING(linha, 1, 2)) AS Data, TIME(SUBSTRING(linha, 10, 5)) AS Hora )FROM arquivo
WHERE linha NOT LIKE "********%" OR linha NOT LIKE "               %" OR linha NOT LIKE "Date     Time%";

segue erro :

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS data,

TIME(SUBSTRING(linha, 10, 5)) AS hora)

FROM arquivo

WHERE linha NOT ' at line 2

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Valmir!

Como falei no post anterior, retire o parêntese Hora )FROM e sua rotina funcionará corretamente.

sua rotina deverá ficar assim:

INSERT INTO import_atn (Data, Hora)
SELECT DATE(CONCAT(SUBSTRING(linha, 7, 2),'-',SUBSTRING(linha, 3, 2),'-20',SUBSTRING(linha, 1, 2)) AS Data, TIME(SUBSTRING(linha, 10, 5)) AS Hora FROM arquivo
WHERE linha NOT LIKE "********%" OR linha NOT LIKE "               %" OR linha NOT LIKE "Date     Time%";

Link para o comentário
Compartilhar em outros sites

  • 0

Boa denis e feriadão aproveito bem, irmão aqui te agradeço pacas a força que vem me dando estou fazendo desta forma conforme o code:

INSERT INTO import_atn (Data, Hora)
SELECT DATE(CONCAT(SUBSTRING(linha, 7, 2),'-',SUBSTRING(linha, 3, 2),'-20',SUBSTRING(linha, 1, 2)) AS Data, TIME(SUBSTRING(linha, 10, 5)) AS Hora FROM arquivo
WHERE linha NOT LIKE "********%" OR linha NOT LIKE "               %" OR linha NOT LIKE "Date     Time%";

e esta dando o seguinte erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS Data, TIME(SUBSTRING(linha, 10, 5)) AS Hora FROM arquivo

WHERE linha NOT LIK' at line 2

obrigado e um forte abraço.

Valmir Lopes

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Valmir!

Quando o MySQL começa a fazer este tipo de sacanagem (pois este comando está presente no manual), eu mudo a lógica.

tente:

WHERE NOT (linha LIKE "********%") AND NOT (linha LIKE "          %") AND NOT (linha LIKE "Date  Time%");
Ou
WHERE SUBSTRING(linha, 1, 10) <> "**********" AND SUBSTRING(linha, 1, 10) <> "          " AND SUBSTRING(linha, , 1, 10) <> "Date  Time";

Informe sucesso ou fracasso.

Um Abraço

P.S. Foi bom acontecer o erro pois o OR estsava errado. Era AND.

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo denis fiz das duas formas e recebi o seguinte erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS Data,

TIME(SUBSTRING(linha, 10, 5)) AS Hora FROM arquivo

WHERE SUBSTRING(li' at line 2

obrigado + uma vez aí pela ajuda que vem me dando

abraços

Valmir Lopes

Link para o comentário
Compartilhar em outros sites

  • 0
Amigo denis fiz das duas formas e recebi o seguinte erro:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS Data,

TIME(SUBSTRING(linha, 10, 5)) AS Hora FROM arquivo

WHERE SUBSTRING(li' at line 2

obrigado + uma vez aí pela ajuda que vem me dando

abraços

Valmir Lopes

Você já verificou se o dado na posição em "TIME(SUBSTRING(linha, 10, 5)) AS Hora FROM arquivo" está com o formato correto?

Link para o comentário
Compartilhar em outros sites

  • 0
o que quer dizer este ( linha, 10, 5 ), a coluna esta no formato de hora .

Não. Quero dizer que se linha é "xxxxxxxxx08:15xxxxxx" quando pegar substring(linha 10,5) vou obter "08:15" que é uma hora válida. Mas se em vez de "08:15" tiver "8:15" como neste exemplo, "xxxxxxxxx8:15xxxxxx" e eu pegar substring(linha 10,5) vou obter "8:15x" que não é uma hora válida.

E pode haver outros erros, tais como "815" ou "8 15" ou "08 15", etc.

Verifique os dados.

Como mais um recurso, modifique o select onde está "TIME(SUBSTRING(linha, 10, 5)) AS Hora" passe para"SUBSTRING(linha, 10, 5) AS Hora"

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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