Array ou dados EXTERNOS

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Array ou dados EXTERNOS

Mensagem por moisesBR em Qui 06 Dez 2012, 13:04

Eu estou penando para inserir, modificar dados da array, por que gosto de organizar usando tabulação ao estilo do excel ou o próprio excel mesmo até, xml ou sei lá, mas o editor de scripts do gm não conserva a tabulação como um txt.

Então decidi tentar colocar num arquivo externo. Então surge o problema: Como fazer isso?
quero organizar assim:
fiz isso no script mas tá complicado modificar valores e/ou acrescentar itens.
Preparei uma planilha que modifico qualquer coisa com facilidade e ainda uso codes do programa para fazer o que quero ou até mesmo num arquivo de texto, e depois copio para o script mas a formatação fica a desejar e quando faço o inverso(script para excel ou txt), a tabulação ja era como o 2° exemplo real abaixo! uma bagunça!

Agora gostaria de saber como fazer o gm reconhecer um banco de dados externos no caso o array ou outro modo para que eu possa usar!

Minha organização por tabulação ou espaço:
itens[0,0]="vazio"itens[0,1]= 0itens[0,2]="nada"itens[0,3]="nada"
itens[1,0]="banana"itens[1,1]= 10000itens[1,2]="banana é..."tens[1,3]="1"
itens[2,0]="nabos"itens[2,1]=100itens[2,2]="nabos é..."itens[2,3]="bla "

O que eu não quero:
itens[0,0]="vazio";itens[0,1]= 0;itens[0,2]="nada";itens[0,3]="Aff! Não eu entendo nada nessa zona";
itens[1,0]="bananabananabanana";itens[1,1]= 0;itens[1,2]="banana é...";itens[1,3]="!";
itens[2,0]="zorra";itens[2,1]= 0;itens[2,2]="nabos é...";itens[2,3]="aff ";

Corro disso:
Spoiler:
Código:
//item tal
itens[0,0]="vazio";
itens[0,1]= 0;
itens[0,2]="nada";
itens[0,3]="Aff! Não eu entendo nada nessa zona";

//item tal
itens[1,0]="bananabananabanana";
itens[1,1]= 0;
itens[1,2]="banana é...";
itens[1,3]="!";

//item tal
itens[2,0]="zorra";
itens[2,1]= 0;
itens[2,2]="nabos é...";
itens[2,3]="aff a lista ficou gigante e tá ruim de modificar";
//a seguir milhares de ítens e destalhes muarhahahahay!

Agora imagine um com inúmeros dados de uma mesma linha(só suposição):
itens[0,0]=1;itens[0,1]=1;itens[0,2]=1;itens[0,3]=1;itens[0,4]=1;itens[0,5]=1;itens[0,6]=1//etc...
e como os dados não seriam de mesmo tamanho em caracteres... seria um tormento!

Fucei o forum pra valer mas não consegui achar até tentei olhando o tópicodo Jiraya, [DLL]CastRead,2.0, e até testei a engine, mas não consegui fazer o que queria!

Resumindo o que quero para deixar bem claro(já no título):
Eu quero usar array ou dados EXTERNOS! Nada online por enquanto! engine sera apreciada
Obrigado!


Última edição por moisesBR em Qui 06 Dez 2012, 14:02, editado 1 vez(es)

moisesBR

Número de Mensagens : 873
Idade : 40
Data de inscrição : 24/10/2009
Reputação : 14
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

http://inprovise.blogspot.com/

Voltar ao Topo Ir em baixo

Re: Array ou dados EXTERNOS

Mensagem por Markituh em Qui 06 Dez 2012, 14:00

Hmmm, entendo sua situação. Uma alternativa seria usar o formato .csv, que é um acrônimo para Comma Separated Values, ou seja, valores separados por vírgula, o que o faz um formato bem fácil de trabalhar. O próprio Excel lê esse tipo de arquivo. Funciona assim:
Código:
celula, celula, celula // Primeira linha
celula, celula, celula // Segunda linha
.. etc
Achei um script interessante na GMC, que abre e lê um arquivo .csv [1] e retorna uma ds_list de duas dimensões (uma dentro da outra). A lista retornada pela função é a das colunas, e esta por sua vez contém os valores.
Código:
// csv_read(fname)
var fname, file, rowlist, collist;
fname = argument0; // Arquivo
file = file_text_open_read(fname); // Lê o arquivo
rowlist = ds_list_create(); // Cria uma DS List

while(!file_text_eof(file)){
  collist = ds_list_create();
  ds_list_add(rowlist, collist);
  str_to_list(file_text_read_string(file), ",", collist);
  file_text_readln(file);
}
file_text_close(file);
return(rowlist);
Claro que você poderia usar a CastRead para ler mais rápido. Vamos a um exemplo: para pegar o valor da terceira coluna (index 2), na segunda linha (index 1), você poderia usar:
Código:
var rows, columns, value;
linhas = csv_read(fname);
colunas = ds_list_find_value(linhas,1);
valor = ds_list_find_value(colunas,2);
Poderia até ser criado um script com o código acima. Quanto a função "str_to_list()", o autor do post disse que você precisa desta extensão, chamada datafunctions. No mais, só é fazer um script que separe os valores por vírgula.
Razz:
Código:
// by Markituh ;)
var str,token,l;
l = ds_list_create();
str = argument0;
token = argument1;
while (string_count(token,str) > 0) {
    ds_list_add(l,
        string_copy(str, 1, string_pos(',',str)-1)
    );
    str = string_delete(str,1,string_pos(',',str));
}
if (string_length(str) > 0) // Pegamos o valor final
    ds_list_add(l,string_copy(str, 1, string_length(str)));
   
return(l);
Neste caso, o terceiro argumento não é necessário. A função já retorna a lista contendo os ítens. Então, ao invés de dar ds_list_create na linha do collist, apague a linha do str_to_list e atribua o collist ao script str_to_list acima.
[1]: Que pode ser nomeado para extensão. Desde que o conteúdo do arquivo seja no formato CSV

Agora é com você, William Boner a tarefa de armazenar os valores na array. Bom desenvolvimento!
Se tiver enganchado, só dizer =P

___________

"Não deixe para amanhã o que se pode fazer hoje"

Links úteis:
Índice de Tutoriais
Manual online do GMS

Markituh

Ranking : Sem avaliações
Número de Mensagens : 2183
Data de inscrição : 11/10/2009
Reputação : 106
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Re: Array ou dados EXTERNOS

Mensagem por PedroX em Qui 06 Dez 2012, 14:01

Se você usar execute_file('nomedoarquivo.txt') automaticamente ele vai definir as arrays. É como se ele copiasse tudo para o código. De outro modo seria inviável e muito mais lento.

PedroX

Ranking : Nota C
Número de Mensagens : 6034
Idade : 21
Data de inscrição : 26/07/2008
Notas recebidas : C+B
Reputação : 286
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   :
   :
   :

Voltar ao Topo Ir em baixo

Re: Array ou dados EXTERNOS

Mensagem por vinians em Qui 06 Dez 2012, 14:04

Faça no Excel por exemplo. Depois la no Excel, você exporta para texto (pode ser SDF) separando cada coluna por um separador tipo ";" e cada linha por CRLF. Depois la no GM crie um script que leia este arquivo e coloque em um vetor. Por exemplo supondo que vc fez como dito acima uma tabela de 10 x 10:
Código:

var i, j;
file = file_text_open_read("tabela.txt");
for (i = 0; i < 10; i += 1)
{
    linha = file_text_read_string(file);
    file_text_readln(file);
    for (j = 0; j < 10; j += 1)
  {
        p = string_pos(";", linha);
        if (p > 0)
        {
            s = string_copy(linha, 1, p - 1);
            linha = string_delete(linha, 1, p);
        } else
          s = linha;
        vetor[i, j] = s;
     
  }
  file_text_close(file);
}
Não deu tempo de testar, mas deve funcionar com poucos ajustes. (Exemplo para uma tabela de 10 x 10)
Flws!

vinians

Ranking : Nota B
Número de Mensagens : 2490
Idade : 27
Data de inscrição : 18/09/2008
Notas recebidas : B-C-A-C
Reputação : 52
Insignia 1 x 0 Insignia 2 x 1 Insignia 3 x 0
Prêmios
   : 0
   : 2
   : 1

http://xcreatorgames.weebly.com/

Voltar ao Topo Ir em baixo

Re: Array ou dados EXTERNOS

Mensagem por Conteúdo patrocinado Hoje à(s) 08:12


Conteúdo patrocinado


Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum