none
Armazenar conteudo de txt em string RRS feed

  • Pergunta

  • Bom , antes de tudo dexa eu explicar a situação pra ficar bem claro.

    Estou desenvolvendo um programa que organiza as musicas corretamente nas pastas. As musicas que ele irá organizar é de um outro software que trabalha com musicas .ogg e dentro de cada pasta onde contem amusica, tem um arquivo de texto (song.ini) que contem as informações de nome de artista e musica, assim:

    artist=nome do artista
    song=nome da musica

    O que teria que fazer era encontrar dentro do arquivo song.ini a tag "artist=" e pegar o valor que esta a frente dela e transformar em string, para depois renomear essa pasta com o valor dessa string. O mesmo vale para "song=". 

    O problema é que não sei como pegar o que está a frente das strings , dessa maneira, ainda mais que no arquivo tem outras tags, e as tags "artist=" e "song=" não estão sempre nessa ordem , pode esta no começo , no meio , no fim do arquivo. Assim não consigo pegar o valor, alguem sugere algo?

    Obrigado
    sábado, 28 de agosto de 2010 18:52

Respostas

  • Usa esse metodo aqui, vai te retorna um Dictionary com todos os parametros do arquivo

    para usar é:

    var paramentros = OpenConfigFile("c:\xxxxxx.ini");
    String song = paramentros["song"];
    String artist = paramentros["artist"];
    
    
    /// <summary>
    /// Abrir um arquivo de configuração
    /// </summary>
    /// <param name="filename">Caminho do arquivo</param>
    /// <returns>Dicionario de dados do arquivo</returns>
    public static IDictionary<string, string> OpenConfigFile(string filename) {
     // Cria variavel de retorno
     var result = new Dictionary<string, string>();
    
     // Carrega todas as linhas do arquivo na memoria
     var buffer = File.ReadAllLines(filename);
    
     // Percorre o buffer carregando as informações de configuraçao na variavel de retorno
     foreach (var line in buffer) {
      // Pula as linhas em branco
      if (String.IsNullOrWhiteSpace(line)) continue;
    
      // Pula linhas que não contem dados de configuração (sem o simbolo '=')
      if (line.IndexOf('=') < 0) continue;
    
      // Divide a linha atual em dados entre o simbolo '='
      var pair = line.Split('=');     
      var key = pair[0]; 
      var value = pair[1];
    
      // Caso o valor da configuração possuir o simbolo "=" ajustar a resposta
      if (pair.Length > 3) {     
       for (int i = 2; i < pair.Length; i++) value += "=" + pair[i];     
      }
    
      // Armazena o parametro de configuração para retorno
      result.Add(key, value);
     }
    
     // Retorna no dicionario de dados com os items encontrados
     return result;
    }
    

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    sábado, 28 de agosto de 2010 21:29
    Moderador
  • Ah... tem razão... esse detalhe me passou desapercebido.... altera as seguintes linhas:

     

    // Divide a linha atual em dados entre o simbolo '='
     var pair = line.Split('=');   
     var key = pair[0].Trim(); 
     var value = pair[1].TrimStart();


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta mrk3004 - Viny terça-feira, 31 de agosto de 2010 01:26
    segunda-feira, 30 de agosto de 2010 23:33
    Moderador

Todas as Respostas

  • Usa esse metodo aqui, vai te retorna um Dictionary com todos os parametros do arquivo

    para usar é:

    var paramentros = OpenConfigFile("c:\xxxxxx.ini");
    String song = paramentros["song"];
    String artist = paramentros["artist"];
    
    
    /// <summary>
    /// Abrir um arquivo de configuração
    /// </summary>
    /// <param name="filename">Caminho do arquivo</param>
    /// <returns>Dicionario de dados do arquivo</returns>
    public static IDictionary<string, string> OpenConfigFile(string filename) {
     // Cria variavel de retorno
     var result = new Dictionary<string, string>();
    
     // Carrega todas as linhas do arquivo na memoria
     var buffer = File.ReadAllLines(filename);
    
     // Percorre o buffer carregando as informações de configuraçao na variavel de retorno
     foreach (var line in buffer) {
      // Pula as linhas em branco
      if (String.IsNullOrWhiteSpace(line)) continue;
    
      // Pula linhas que não contem dados de configuração (sem o simbolo '=')
      if (line.IndexOf('=') < 0) continue;
    
      // Divide a linha atual em dados entre o simbolo '='
      var pair = line.Split('=');     
      var key = pair[0]; 
      var value = pair[1];
    
      // Caso o valor da configuração possuir o simbolo "=" ajustar a resposta
      if (pair.Length > 3) {     
       for (int i = 2; i < pair.Length; i++) value += "=" + pair[i];     
      }
    
      // Armazena o parametro de configuração para retorno
      result.Add(key, value);
     }
    
     // Retorna no dicionario de dados com os items encontrados
     return result;
    }
    

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    sábado, 28 de agosto de 2010 21:29
    Moderador
  • Olá, ve se isso ajuda.

     

        Ini = new IniFile("\\song.ini");
        string nomeartista = Ini.LerIni("musica", "artist");

        public class IniFile
        {
            public string path;
            [DllImport("kernel32")]
            private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
            [DllImport("kernel32")]
            private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

            public IniFile(string INIPath)
            {
                path = INIPath;
            }

            public void GravarIni(string Section, string Key, string Value)
            {
                WritePrivateProfileString(Section, Key, Value, this.path);
            }

            public string LerIni(string Section, string Key)
            {
                StringBuilder temp = new StringBuilder(255);
                int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.path);
                return temp.ToString();
            }
        }

    Abraços,

     


    Zagatti, Angelo Itápolis-SP
    domingo, 29 de agosto de 2010 20:56

  • Usa esse metodo aqui, vai te retorna um Dictionary com todos os parametros do arquivo

    para usar é:

    var paramentros = OpenConfigFile("c:\xxxxxx.ini");
    String song = paramentros["song"];
    String artist = paramentros["artist"];
    
    
    /// <summary>
    /// Abrir um arquivo de configuração
    /// </summary>
    /// <param name="filename">Caminho do arquivo</param>
    /// <returns>Dicionario de dados do arquivo</returns>
    public static IDictionary<string, string> OpenConfigFile(string filename) {
     // Cria variavel de retorno
     var result = new Dictionary<string, string>();
    
     // Carrega todas as linhas do arquivo na memoria
     var buffer = File.ReadAllLines(filename);
    
     // Percorre o buffer carregando as informações de configuraçao na variavel de retorno
     foreach (var line in buffer) {
     // Pula as linhas em branco
     if (String.IsNullOrWhiteSpace(line)) continue;
    
     // Pula linhas que não contem dados de configuração (sem o simbolo '=')
     if (line.IndexOf('=') < 0) continue;
    
     // Divide a linha atual em dados entre o simbolo '='
     var pair = line.Split('='); 
     var key = pair[0]; 
     var value = pair[1];
    
     // Caso o valor da configuração possuir o simbolo "=" ajustar a resposta
     if (pair.Length > 3) { 
     for (int i = 2; i < pair.Length; i++) value += "=" + pair[i]; 
     }
    
     // Armazena o parametro de configuração para retorno
     result.Add(key, value);
     }
    
     // Retorna no dicionario de dados com os items encontrados
     return result;
    }
    

    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....

    Adorei esse método, com umas pequenas modificações ficou perfeito. Só estou com um pequeno problema:

      No arquivo ini, as tags tambem podem estar definidas com um espaço entre o sinal de "=" (Desta forma: exemplo = exemplo), e isso faz com que o programa não encontre as informações causando um exception.

     Como posso contornar isso de maneira que ele leia tais informações tambem? 

    Obrigado Amigo

    segunda-feira, 30 de agosto de 2010 21:30
  • Ah... tem razão... esse detalhe me passou desapercebido.... altera as seguintes linhas:

     

    // Divide a linha atual em dados entre o simbolo '='
     var pair = line.Split('=');   
     var key = pair[0].Trim(); 
     var value = pair[1].TrimStart();


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta mrk3004 - Viny terça-feira, 31 de agosto de 2010 01:26
    segunda-feira, 30 de agosto de 2010 23:33
    Moderador
  • Ah... tem razão... esse detalhe me passou desapercebido.... altera as seguintes linhas:

     

     

    // Divide a linha atual em dados entre o simbolo '='
     var pair = line.Split('='); 
     var key = pair[0].Trim(); 
     var value = pair[1].TrimStart();

     


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....

      Porque trabalhar com os espaços em brancos, quando posso simplesmente elimina-los? muito bem pensado, vejo que ainda tenho muito que aprender rs

     Obrigado pela ajuda. 

    terça-feira, 31 de agosto de 2010 01:25
  • Disponha... é questão de habito com o tempo essas coisas ficam automaticas...

    (to mexendo com desevolvimento java Android e me sinto um iniciante pesquisando no google o tempo todo para ver como abre um arquivo texto e coisas assim ><)


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    terça-feira, 31 de agosto de 2010 21:07
    Moderador