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

Erro Com Dados De Arquivo


Guest Visitante

Pergunta

quando coloco para ler o arquivo abaixo com o programa abaixo esta ocorrendo um 'string index out of range' :o . alguém pode me dizer o por que disso ? :blink:

usuarios.txt


alexandre       456123789
anderson        1245698456
antonio         123456456
carlos          91257581
cesar           987458
rosemary        789456125


f = open('usuarios.txt','r')

for linha in f:
   i = 0   
   snumero = ''
     
   while linha[i] != ' ':
       snome = snome + linha[i]
       i += 1
   
   while linha[i] == ' ':
       i += 1

   while linha[i] != '\n':
       snumero = snumero + linha[i]
       i += 1           

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Pra mim só faltou definir snome:

f = open('usuarios.txt','r')

for linha in f:
   i = 0  
   snumero = ''
   snome = ''
    
   while linha[i] != ' ':
       snome = snome + linha[i]
       i += 1
  
   while linha[i] == ' ':
       i += 1

   while linha[i] != '\n':
       snumero = snumero + linha[i]
       i += 1          

   print snome, snumero
Se o separador de nome e número for um tab ao invés de espaços fica mais fácil:
f = open('usuarios_tab.txt','r')

for linha in f:
   i = 0  
   snumero = ''
   snome = ''
    
   while linha[i] != '\t':
       snome = snome + linha[i]
       i += 1

   i += 1
   while linha[i] != '\n':
       snumero = snumero + linha[i]
       i += 1          

   print snome, snumero
E mais fácil ainda:
f = open('usuarios_tab.txt','r')

for linha in f:
    l = linha.rstrip().split('\t')
    print l[0], l[1]

Link para o comentário
Compartilhar em outros sites

  • 0

olah kakao,

eu só esqueci de postar a declaracao da variavel aí. ela não estava faltando não. o problema era o indice mesmo. achei meio estranho dar erro no indice certo.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - MarcelComputacao -

esta acontecendo 'index out of range' :o não posicao marcada abaixo :o :o :o . qual é o problema com esse codigo ? :blink:


f = open('usuarios.txt','r')

while True:

   i = 0      
   snumero = ''
   snome = ''
   bloco = f.readline()
   
   while bloco[i] != ' ':
       snome = snome + bloco[i]    #esta acontecendo index out of range aqui .
       i += 1

   while bloco[i] == ' ':   
       i += 1

f.close()          

Link para o comentário
Compartilhar em outros sites

  • 0

Você está esquecendo de quebrar o loop no fim do arquivo. Coloquei uma condição de fim. Tem linha vazia no arquivo? O seu código vai falhar se houver. Coloquei uns prints para ajudar a achar os erros.

f = open('usuarios.txt','r')

linha = 0
while True:

   i = 0      
   snumero = ''
   snome = ''

   bloco = f.readline()
   if not bloco: break
   linha += 1

   print 'linha: ', linha,
   while bloco[i] != ' ':
       print i, bloco[i],
       snome = snome + bloco[i]    #esta acontecendo index out of range aqui .
       i += 1
   print

   while bloco[i] == ' ':  
       i += 1

f.close()

Link para o comentário
Compartilhar em outros sites

  • 0

está dando o mesmo erro aqui, :o porque ?


f = open('usuarios.txt','r')

bloco = f.read()

i = 0
conta = 0
c = 0

while True:
    snome = ''
    snumero = ''

    if not bloco :
        exit(1)

    while bloco[i] != ' ':
        c += 1
        snome = snome + bloco[i]
        i += 1

    while bloco[i] == ' ' and c == i:
        c += 1
        i += 1

    while bloco[i] != '\n' and c == i:
        snumero = snumero + bloco[i]
        c += 1
        i += 1

    print snumero 
    

Link para o comentário
Compartilhar em outros sites

  • 0

Pelo código não dá para enternder o que você pretende. Mas vejo dois problemas:

O primeiro é que f.read() lê o arquivo inteiro então bloco vai ser sempre verdadeiro e a sua condição de fim nunca será alcançada. A condição neste caso pode ser

if i == len(bloco): exit(0)

O código 1 em um exit significa uma condição de erro o que não é o caso no seu programa.

O segundo é que i vai ser sempre igual a c então não sei para que você está testando i == c.

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,3k
×
×
  • Criar Novo...