none
Função AT RRS feed

  • Pergunta

  • pessoal mts vezes desculpe pelas perguntas mas estou começando a programação em C# e vindo do universo VFP.

    No VFP nós temos uma função chamada AT em qual passamos 2 ou 3 parametros e ela retorna rapidamente a posição d caracteres da string

    Exemplo 1:
    lcExpressao = "ABCAD"
    ?at("A",lcExpressao)
    retorno: 1

    Exemplo 2:
    lcExpressao = "ABCAD"
    ?at("A",lcExpressao,2)
    retorno: 4

    Existe alguma função própria no C# q consiga fazer isto em uma única linha ou precisaria criar a minha própria?


    Atenciosamente, Frederico Oliva (foliva@dc-info.com)

    domingo, 24 de novembro de 2013 20:40

Respostas

  • Use o indexOf olhe este eemplo ele retorna 1 na variavel int neste case e existe varias sobrecargas como a partir de qual indice deseja olhe este ex retorna 1 no valor pois se inicia em 0 veja :

     string daniel = "DANIEL";
              int valor = daniel.IndexOf("A");

    domingo, 24 de novembro de 2013 21:22
  • Tem como resolver com linq em uma linha de codigo mas nao sei se ja conhece linq ou uma funcao que passa como parametro a string, o valor que deseja buscar qual por exemplo nessa passei 4 vai buscar onde o A é quatro igual na sua expressão :

    private  int IndexOfParametro(string str, string c, int n)
            {
                int posicaoretorno = -1;
    
                for (int i = 0; i < n; i++)
                {
                    posicaoretorno = str.IndexOf(c, posicaoretorno + 1);
    
                    if (posicaoretorno == -1) break;
                }
    
                return posicaoretorno;
            }
    
    //como usar metodo :
     string lcExpressao = "ABCADAEFGAHIJA";
    //aqui na i vai retornar o valor sera 9 comecando com indice 0
      int i = IndexOfParametro(lcExpressao, "A", 4);

    • Marcado como Resposta Frederico Oliva domingo, 24 de novembro de 2013 23:35
    domingo, 24 de novembro de 2013 21:57
  • Então veja que desta forma você não tem ocontrole de qual index você deseja ler pq no metodo que te mostrei voce passa como parametro por exemplo buscar a terceira letra A e passa o valor 3, no seu caso voce le a expressao e da um replace ou seja e le o tanto de caracter que foi alterado, entao uma coisa seria ler o indice e buscar a posicao do indice e outra onde o caracter existe na string.
    • Marcado como Resposta Frederico Oliva domingo, 24 de novembro de 2013 23:35
    domingo, 24 de novembro de 2013 22:18

Todas as Respostas

  • Use o indexOf olhe este eemplo ele retorna 1 na variavel int neste case e existe varias sobrecargas como a partir de qual indice deseja olhe este ex retorna 1 no valor pois se inicia em 0 veja :

     string daniel = "DANIEL";
              int valor = daniel.IndexOf("A");

    domingo, 24 de novembro de 2013 21:22
  • Olá Daniel,

    Mt obrigado pela ajuda, consegui usar a função INDEXOF p/ encontrar a posição do primeiro caractere.

    Se eu precisar encontrar a 2ª, 3ª, 4ª e assim por diante do caractere, como fazer?

    Exemplo 1:
    lcExpressao = "ABCADAEFGAHIJA"
    ?at("A",lcExpressao,2)
    retorno: 4

    Exemplo 2:
    lcExpressao = "ABCADAEFGAHIJA"
    ?at("A",lcExpressao,3)
    retorno: 6

    Exemplo 3:
    lcExpressao = "ABCADAEFGAHIJA"
    ?at("A",lcExpressao,4)
    retorno: 10

    Exemplo 4:
    lcExpressao = "ABCADAEFGAHIJA"
    ?at("A",lcExpressao,5)
    retorno: 14

    Mt obrigado pela paciência.


    Atenciosamente, Frederico Oliva (foliva@dc-info.com)

    domingo, 24 de novembro de 2013 21:30
  • Tem como resolver com linq em uma linha de codigo mas nao sei se ja conhece linq ou uma funcao que passa como parametro a string, o valor que deseja buscar qual por exemplo nessa passei 4 vai buscar onde o A é quatro igual na sua expressão :

    private  int IndexOfParametro(string str, string c, int n)
            {
                int posicaoretorno = -1;
    
                for (int i = 0; i < n; i++)
                {
                    posicaoretorno = str.IndexOf(c, posicaoretorno + 1);
    
                    if (posicaoretorno == -1) break;
                }
    
                return posicaoretorno;
            }
    
    //como usar metodo :
     string lcExpressao = "ABCADAEFGAHIJA";
    //aqui na i vai retornar o valor sera 9 comecando com indice 0
      int i = IndexOfParametro(lcExpressao, "A", 4);

    • Marcado como Resposta Frederico Oliva domingo, 24 de novembro de 2013 23:35
    domingo, 24 de novembro de 2013 21:57
  • Daniel, neste caso eu preciso criar uma função própria, correto?

    Eu fiz isto p/ suprir a necessidade do uso da função OCCURS q havia no VFP (por favor veja o POST do link http://social.msdn.microsoft.com/Forums/pt-BR/9d9f251b-f5ad-42f9-97cf-0c314e91bb88/funo-occurs?forum=vscsharppt).

    Fiz o certo?

    Codifiquei da forma abaixo:

    Função:

            public static int Ocorrencias(string procura, string expressao)
            {
                return (expressao.Length - expressao.Replace(procura, "").Length);

    Chamada:

                    int oc = Funcoes.Ocorrencias(".", chave);

    Mais uma vez obrigado e desculpe as perguntas, mas realmente faz menos d 1 semana q comecei programar em C#. Antes era só VFP e mais nd.


    Atenciosamente, Frederico Oliva (foliva@dc-info.com)

    domingo, 24 de novembro de 2013 22:03
  • Então veja que desta forma você não tem ocontrole de qual index você deseja ler pq no metodo que te mostrei voce passa como parametro por exemplo buscar a terceira letra A e passa o valor 3, no seu caso voce le a expressao e da um replace ou seja e le o tanto de caracter que foi alterado, entao uma coisa seria ler o indice e buscar a posicao do indice e outra onde o caracter existe na string.
    • Marcado como Resposta Frederico Oliva domingo, 24 de novembro de 2013 23:35
    domingo, 24 de novembro de 2013 22:18