[RESOLVIDO] - ler aquivo txt e separar os dados

Pessoal boa noite.

Estou efetuando a leitura de um txt, até ai tudo bem, mas estou precisando separar os dados.

Tenho uma parte do txt (posição 38) que é números de telefone, nesta posição os dados tem varios tamanhos:
ex: 03133659800
33392526
54586
1600

Hoje minha estrutura copio esta parte do arquivo toda para meu BD (campo) numero, mas precisava separar, assim.

se o dado iniciar com 0 faça
$DDD recebe o numero se não
se o dado iniciar com 3 faça
$local recebe o numero
se o dado iniciar com 5 faça
$int recebe o numero

e assim por diante, será que poderiam me ajudar a estruturar ou qual forma de pegar um dado através da 1ª informação.

A função do PHP substr não te ajuda?
http://php.net/manual/pt_BR/function.substr.php

Thyago, boa noite muito obrigado pelo apoio, hoje estou utilizando a função substr para pegar os dados, até ai beleza o problema é que tenho informações em vários tamanhos conforme acima.
ex: 02131987781234 (tamanho 14 dígitos)
0213133391100 (tamanho 13 dígitos)
031987781234 (tamanho 12 dígitos)
03133391100 (tamanho 11 dígitos)
987781234 (tamanho 9 dígitos)
33391100 (tamanho 8 dígitos)
54586 (tamanho 5 dígitos)
1100 (tamanho 4 dígitos)

Já tentei pegar da esquerda pra direita e da direita pra esquerda, mas como pode observar para cada tamanho de numero eu precisaria diferenciar.

segue parte do código para tentar auxiliar no entendimento.

$arquivo = fopen($path.$file,‘r’);
#print_r($arquivo);
#die(‘teste1’);

	//se o arquivo existir
	//if (file_exists($arquivo)){

	//vare cada linha do arquivo aberto
	while(!feof($arquivo)) {
	
	$linha = fgets($arquivo, 9999);
	$numero = substr ($linha,38,-69);
    					
	echo " ".$numero. " </br> ";


		}
	
	
	}
	
	
	 

	}

Celso,

Se não houver um padrão NÃO HÁ COMO FAZER… Imagine o seguinte: só é possível estabelecer rotinas para padrões pré-definidos.

Deve haver algo que você não está vendo no seu .txt que estabelece um padrão. Se não houver nenhum padrão, então leia a linha inteira, extraia todos os espaços em branco, veja qual o tamanho da string e estabeleça a máscara que desejar.

Jovito

Jovitomelo, boa tarde.

Então há um padrão, hoje estou lendo a linha inteira, e apartir da posição 38 ate 53 é reservada para o numero, este número pode ter vários tamanhos, conforme descrito acima, imagine que seria como um select, imagine que precisaria ler o conteúdo da posição 38 a 53 e depois definir o que fazer.

Celso, boa noite.

Vamos por parte:

Se você sabe ler as linhas do arquivo txt, então tente…

// 012345678901234567890123456789012345678901234567890123456789
$SuaLinha = “09854098078999237887982337432498877878* aqui serve *8768758”;

/*
Aqui você busca o que serve pra você… da posição 38 até a posição 53 são 15 posições…
$rest = substr($SuaLinha,38,15);

Aqui você tira todos os espaços no início e no final…
$rest = TRIM($rest);

Aqui você pega o comprimento apenas do que lhe interessa,
sem espaços…

$tam_de_rest = strlen($rest);
/
// Aqui você cria a máscara de acordo com o comprimento desejado.
switch (strlen(TRIM(substr($SuaLinha,38,15)))) {
case 15: /
Se o comprimento for 15… /
echo TRIM(substr($SuaLinha,38,15));
break;
case 14: /
Se o comprimento for 14… /
echo “14”;
break;
case 13: /
Se o comprimento for 13… /
echo “13”;
break;
case 12: /
Se o comprimento for 12… /
echo “12”;
break;
case 11: /
Se o comprimento for 11… */
echo “11”;
break;

}

Você poderá incluir algumas condicionais pra testar se o valor é igual a zero, se é maior do que zero, etc etc etc.

Jovitomelo, muito obrigado deu certinho, estava usando a cláusula if para validar, agora posso utilizar as duas.

Muito obrigado, assim que finalizar posto aqui, como ficou e fecho este tema.

Prezados colegas, bom dia.

Ainda estou com uma pequena questão sobre este tópico onde efetuou a leitura e gravação do arquivo txt que é:

no txt tem o numero (0123131231468) o problema é que preciso retirar a 2ª e 3ª posição ou seja o 12, ficando o numero (03131231468), para ser gravado no na variável linha.

$linha = substr ($linha,38,13);

Será que teria algo a se fazer para solucionar este caso? desde já agradeço a todos.

Teste:

$linha = substr($linha, 0, -12).substr($linha, -10);

Prezado George, muito obrigado pelo apoio, funcionou certinho, conforme sua instrução, fiz um ajuste, mas deu certinho.

Ficou assim:
$local = substr($linha, 38, 1)[size=14pt].[/size]substr($linha,41,6);

O que faltava era o ponto para unir os campos, muito obrigado mesmo, estava a dias apanhando disto.