none
Extraer una palabra dentro de una cadena string RRS feed

  • Pregunta

  • Veamos pongo la cadena que obtengo

    ----------------------            

    collection: 
        id: 4149442980,
        site_id: MLA,
        date_created: 2018-09-10T02:40:55.000-04:00,
        date_approved: null,
        money_release_date: null,
        last_modified: 2018-09-10T02:40:57.000-04:00,
        payer: 
          id: 353105516,
          first_name: ,
          last_name: guavo,
          phone: 
            area_code: null,
            number: null,
            extension: 
          ,
          identification: 
            type: DNI,
            number: 289100
          ,
          email: gustlered.com,
          nickname: @353105516
        ,
        order_id: 91170073103,
        external_reference: 911703103,  ============> solo quiero este numero
        merchant_order_id: 834338035,
        reason: clases,
        currency_id: ARS,
        transaction_amount: 77,  ===============> y este numero de la cadena
        net_received_amount: 0,
        total_paid_amount: 77,
        shipping_cost: 0,
        coupon_amount: 0,
        coupon_fee: 0,
        finance_fee: 0,
        discount_fee: 0,
        coupon_id: null,
        status: rejected,
        status_detail: cc_rejected_other_reason,
        installments: 1,
        issuer_id: 1,
        installment_amount: 77,
        deferred_period: null,
        payment_type: credit_card,
        marketplace: NONE,
        operation_type: regular_payment,
        transaction_order_id: null,
        statement_descriptor: WWW.MERCPAGO.COM,
        cardholder: 
          name: Maria campos,
          identification: 
            number: 2890,
            type: DNI

        ,
        authorization_code: null,
        marketplace_fee: 0,
        deduction_schema: null,
        refunds: [],
        amount_refunded: 0,
        last_modified_by_admin: null,
        api_version: 2,
        concept_id: null,
        concept_amount: 0,
        internal_metadata: 
          processed_by: checkout-off-v1
        ,
        collector: 
          id: 204905542,
          first_name: Maria,
          last_name: Caos,
          phone: 
            area_code: null,
            number: 115459,
            extension: 
          ,
          email: correodelçores@gmail.com,
          nickname: CAMA8404

    ----------------------------------------------

    o sea solo quiero los numeros que marco en semejante cadena que obtengo (solo esos dos numeros 911703103 y el 77, nada mas 

    external_reference: 911703103,  ============> solo quiero este numero
       
    transaction_amount: 77,  ===============> y este numero de la cadena        (si me pueden ayudar GRACIAS)

    lunes, 10 de septiembre de 2018 6:59

Respuestas

  • Buenas,

    Adicionalmente a lo que te ha dicho Leandro, si es una operación que vas a repetir, quizás te convenga utilizar expresiones regulares, por ejemplo, algo así (Suponiendo que es un unico string todo el contenido):

    string cadena = "TU CADENA DE TEXTO";
    Regex regexExternal_reference = new Regex(@"external_reference: (\d+),");
    Regex regextransaction_amount = new Regex(@"transaction_amount: (\d+),");
    
    string external_reference = regexExternal_reference.Match(cadena).Groups[1].Value;
    string transaction_amount = regextransaction_amount.Match(cadena).Groups[1].Value;


    En caso ser una colección de strings:

    string[] cadena = tu array
    Regex regexExternal_reference = new Regex(@"external_reference: (\d+),");
    Regex regextransaction_amount = new Regex(@"transaction_amount: (\d+),");
    
    
    
    string external_reference = cadena.Where(x => regexExternal_reference.IsMatch(x)) //Filtramos los que coincidan
                                      .Select(x => regexExternal_reference.Match(x).Groups[1].Value) //Obtenemos el valor
                                      .FirstOrDefault(); //Lo seleccionamos
    string transaction_amount = cadena.Where(x => regextransaction_amount.IsMatch(x)) //Filtramos los que coincidan
                                      .Select(x => regextransaction_amount.Match(x).Groups[1].Value) //Obtenemos el valor
                                      .FirstOrDefault(); //Lo seleccionamos

    Ten en cuenta que los Regex son "caros", si es una operación que vas a hacer una única vez, es mejor la respuesta de leandro, si es algo que vas a ejecutar varias veces en tu programa, crear un regex y mantener el objeto da mejor performance

    Si tienes dudas nos comentas

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub
    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.


    lunes, 10 de septiembre de 2018 16:52

Todas las respuestas

  • hola

    podrias usar algo como ser

    string[] lineas = File.ReadAllLines("ruta file");
    
    string linea = lineas.FirstOrDefault(x=>x.Contains("external_reference"));
    string nro = linea.Split(':')[1];
    
    string linea2 = lineas.FirstOrDefault(x=>x.Contains("transaction_amount"));
    string nro2 = linea2.Split(':')[1];


    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 10 de septiembre de 2018 13:01
  • Buenas,

    Adicionalmente a lo que te ha dicho Leandro, si es una operación que vas a repetir, quizás te convenga utilizar expresiones regulares, por ejemplo, algo así (Suponiendo que es un unico string todo el contenido):

    string cadena = "TU CADENA DE TEXTO";
    Regex regexExternal_reference = new Regex(@"external_reference: (\d+),");
    Regex regextransaction_amount = new Regex(@"transaction_amount: (\d+),");
    
    string external_reference = regexExternal_reference.Match(cadena).Groups[1].Value;
    string transaction_amount = regextransaction_amount.Match(cadena).Groups[1].Value;


    En caso ser una colección de strings:

    string[] cadena = tu array
    Regex regexExternal_reference = new Regex(@"external_reference: (\d+),");
    Regex regextransaction_amount = new Regex(@"transaction_amount: (\d+),");
    
    
    
    string external_reference = cadena.Where(x => regexExternal_reference.IsMatch(x)) //Filtramos los que coincidan
                                      .Select(x => regexExternal_reference.Match(x).Groups[1].Value) //Obtenemos el valor
                                      .FirstOrDefault(); //Lo seleccionamos
    string transaction_amount = cadena.Where(x => regextransaction_amount.IsMatch(x)) //Filtramos los que coincidan
                                      .Select(x => regextransaction_amount.Match(x).Groups[1].Value) //Obtenemos el valor
                                      .FirstOrDefault(); //Lo seleccionamos

    Ten en cuenta que los Regex son "caros", si es una operación que vas a hacer una única vez, es mejor la respuesta de leandro, si es algo que vas a ejecutar varias veces en tu programa, crear un regex y mantener el objeto da mejor performance

    Si tienes dudas nos comentas

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub
    Ranking GitHub Euskadi
    Ranking GitHub Alava

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.


    lunes, 10 de septiembre de 2018 16:52