Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leandro Ricardo

quebrar string e preencher código json

Recommended Posts

Boa tarde amigos..

Estou com um problema aqui que está me deixando dias parado!

realmente, não encontro solução.. Qualquer sugestão é muito bem vinda!

Vamos lá ao problema;

 

Tenho uma string que vem de uma aplicação de terceiros... essa string contém alguns objetos e alguns valores... segue exemplo;

=== Run information ===


Scheme:       weka.associations.Apriori -N 10 -T 0 -C 0.9 -D 0.05 -U 1.0 -M 0.1 -S -1.0 -c -1
Relation:     NFe
Instances:    2
Attributes:   3
              Acucar_Cristal_02_kg
              Cafe_250_gr
              frango_inteiro
=== Associator model (full training set) ===




Apriori
=======


Minimum support: 0.75 (1 instances)
Minimum metric <confidence>: 0.9
Number of cycles performed: 5


Generated sets of large itemsets:


Size of set of large itemsets L(1): 6


Size of set of large itemsets L(2): 6


Size of set of large itemsets L(3): 2


Best rules found:


 1. Cafe_250_gr=yes 1 ==> Acucar_Cristal_02_kg=yes 1    conf:(1)
 2. Acucar_Cristal_02_kg=yes 1 ==> Cafe_250_gr=yes 1    conf:(1)
 3. frango_inteiro=no 1 ==> Acucar_Cristal_02_kg=yes 1    conf:(1)
 4. Acucar_Cristal_02_kg=yes 1 ==> frango_inteiro=no 1    conf:(1)
 5. Cafe_250_gr=no 1 ==> Acucar_Cristal_02_kg=no 1    conf:(1)
 6. Acucar_Cristal_02_kg=no 1 ==> Cafe_250_gr=no 1    conf:(1)
 7. frango_inteiro=yes 1 ==> Acucar_Cristal_02_kg=no 1    conf:(1)
 8. Acucar_Cristal_02_kg=no 1 ==> frango_inteiro=yes 1    conf:(1)
 9. frango_inteiro=no 1 ==> Cafe_250_gr=yes 1    conf:(1)
10. Cafe_250_gr=yes 1 ==> frango_inteiro=no 1    conf:(1)

Esse valores são o seguinte:
Para cada 1 item "Cafe_250_gr" vendido, também é vendido 1 "Acucar_Cristal_02_kg". O valor logo após o yes significa valor vendido.
Reparem que só foi vendido 3 produtos diferentes.
Tenho uma variável json com a seguinte estrutura:

var json = {
'label': ['label A', 'label B', 'label C'],
'values': [
{
'label': 'date A',
'values': [20, 40, 15]
},
{
'label': 'date B',
'values': [30, 10, 45]
},
{
'label': 'date C',
'values': [38, 20, 35]
},
{
'label': 'date D',
'values': [58, 10, 35]
},
{
'label': 'date E,
'values': [55, 60, 34]
}]
};

'label': ['label A', 'label B', 'label C'] >>>> Essa variável vai absorver os produtos vendidos, no caso são 3.

 

{
'label': 'date A',
'values': [20, 40, 15]
} >>>>> Essa variável vai marcar o numero da venda e quanto foi vendido pra cada produto, obedecendo a ordem dos produtos...

 

RESUMINDO, preciso que esse json fique nesse caso, da seguinte forma

'label': ['Cafe_250_gr', 'Acucar_Cristal_02_kg', 'frango_inteiro'],
'values': [
{
'label': 'Venda 1',
'values': [1, 1, 0]
},
{
'label': 'Venda 2',
'values': [1, 1, 0]
},
{
'label': 'Venda 3',
'values': [0, 1, 1]
}.....

Reparem que na terceira venda registrada no texto, não existem café, o motivo por ele levar 0 no valor values do json.

Eu preciso montar essa variável com os produtos e os valores da string, pra isso, preciso quebra-lá como o código abaixo:

var array = texto.split("\n");
                        for(i in array) {
                            if(array[i] == 'Best rules found:')
                            {
                                linhaInicio = parseInt(i) + 2;
                                break;
                            }
                        }

Com esse código, consigo pegar exatamente os valores que preciso ex: 1. Cafe_250_gr=yes 1, mas daí pra frente não consigo fazer muita coisa..

 

Preciso de uma luz..

 

Cordialmente, Leandro Ricardo

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não sei como você pega a string, mas improvisei um ajax aqui..

 

<script type="text/javascript">
var str = '';
var xhr = new XMLHttpRequest();
xhr.open('GET', 'str.txt', false);
xhr.addEventListener('readystatechange', function() {
    if(xhr.readyState === 4 && xhr.status == 200) {
        str = xhr.responseText;
    }
});
xhr.send();




str = str.replace(/\r\n|\r|\n/g, ''); //remove all line breaks

var rules_str = str.replace(/(.*)Best rules found:(.*)/ig, '$2').trim();
rules_str = rules_str.replace(/\s+conf:\(1\)\s*/g, '');

var rules = rules_str.split(/\d\.\s/g);


var er = /(\w+)=(yes|no)\s(\d)/;
var products = [];
rules.forEach(function(rule) {
    if(rule) {
        var splited_rule = rule.split(er);
        products.push({
            product1: splited_rule[1],
            solded1: splited_rule[2],
            quantity1: splited_rule[3],

            product2: splited_rule[5],
            solded2: splited_rule[6],
            quantity2: splited_rule[7]
        });
    }
});

console.table(products);

</script>
saída:

 

T3gWnzk.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, valeu pela força...

 

Ficou o aprendizado de estudar regex!

 

Só não consegui reproduzir esse comando: console.table!

 

Estou trabalhando com node.js.

 

Desde já, agradeço

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.