View Single Post
  #1  
Old 02-02-2008, 04:03 PM
Chompy Chompy is offline
\(_o)/
Chompy's Avatar
Join Date: Sep 2006
Location: Norway
Posts: 2,815
Chompy is just really niceChompy is just really niceChompy is just really nice
Send a message via MSN to Chompy
My weird file parser?

PHP Code:
/*  scripted by Chompy
      
      # prefix = notes
      $ prefix = global variables (ie. author)
      
      $ variables Always on top!

      All spaces must be double spaced!
        (Not in params/variables though!)
        
      Global vars can only contain 1 member/value,
        it's a string, not an array
*/
function onCreted() {
  
this.global_variables = {"author"};
}
public function 
compile(infomode) {
  
temp.lines cleanfile(infomode);
  
temp.global = findglobalvars(lines);
  
  for(
temp.: global) {
    if (
g[0in this.global_variables) {
      
this.global.(@ g[0]) = g[1];
    }
  }
  
this.info.variables 0;
  
this.info.id 0;
  for (
temp.line lines.subarray(global.size() - 1)) {
    
//lets jump over the global vars
    
temp.tokens line.tokenize("  ");
    
temp.str convertParamsToString(tokens.subarray(3));
    
temp.arr convertStringToArray(str);
    
    
this.data.(@ tokens[1]) = arr;
    
this.info.variables.add({tokens[2], tokens[1]});
    
this.info.id.add({tokens[0], tokens[1]});
  }
  
this.info.iscompiled true;
}
public function 
findidbyname(str) {
  if (
this.info.iscompiled) {
    for(
temp.key this.info.id) {
      if (
key[1] == str) return key[0];
    }
  }return -
1;
}
public function 
findvarbyid(id) {
  if (
this.info.iscompiled) {
    for(
temp.key this.info.id) {
      if (
key[0] == id) return this.data.(@key[1]);
    }
  }return 
0;
}
public function 
findvarbyname(name) {
  if (
this.info.iscompiled) {
    for(
temp.key this.info.variables) {
      if (
key[0] == name) return this.data.(@key[1]);
    }
  }return 
0;
}
function 
convertStringToArray(s) {
  
out 0;
  for(
temp.s.tokenize(",")) out.add(a);
  return 
out;
}
function 
convertParamsToString(p) {
  
temp.out 0;
  
temp.ar 0;
  for(
temp.p) {
    if (
a.starts("|")) out a.substring(1a.length() - 1);
    else if (
a.starts("'")) {
      
ar 1;
      
out @= " " a.substring(1a.length() - 1);
      continue;
    }else if (
a.ends("|")) {
      
out @= " " a.substring(0a.length() - 1);
    }else if (
a.ends(",") && !a.ends("',")) {
      
out @= " " a.substring(0a.length() - 1) @ ",";
    }
    if (
ar) {
      if (
a.ends(".'|")) {
        
ar 0;
        
out out.substring(0out.length() - 1);
        break;
      }else if (
a.ends("',")) {
        
ar 0;
        
out @= " " a.substring(0a.length() - 3);
        
out @= a.substring(a.pos("',") - 11) @ ",";
      }else 
out @= " " a;
    }
  }
  return 
out;
}
function 
cleanfile(filemode) {
  
temp.fakefile 0;
  if (
modefakefile.loadlines(file);
  else 
fakefile file;
  if (
fakefile.type() == 3) {
    
temp.out 0;
    for(
temp.line fakefile) {
      if (!(
line.starts("#")) && line != "" && !(line.length() in {04})) {
        
out.add(line);
      }
    }
    return 
out;
  }
  return 
0;
}
function 
findglobalvars(lines) {
  
temp.out = {-1};
  
temp.0;
  for(
temp.line lines) {
    if (
line.starts("$")) {
      
out[0] = i;
      
out.add({line.tokenize("  ")[0].substring(1), line.tokenize("  ")[1]});
    }
    
++;
  }
  return 
out;

For example, put this in a class named.. err... maybe 'test_file'?

Now, we need a test file, or an array with members responding to the lines that the file has:

NPC Code:

# Global variables listed below
$author Chompy
# Skills listed below
# ID GLOBALNAME VARNAME |VARIABLES/PARAMS|
1 SKILL_RUN run |Running, 'Will allow you to run.', 1, 1.5|
2 SKILL_JUMP jump |Jump, 'Will allow you to jump.'|




Now, how the functions work, example:

PHP Code:
function onCreated() {
  
join("test_file");

  
compile("mud/testfile.txt"true);

  
/*  First param is either the filepath (param2 must be true then), or
       an actual array (Read above code tags and param2 must be false).
       Basicly what it does is reading the array/file, then convert it into  
       readable variables. How to read them; Example: */

  
echo(this.global.author); // Chompy
  
echo(this.info.variables); // "run,SKILL_RUN","jump,SKILL_JUMP"
  
echo(this.info.id); // "1,SKILL_RUN","2,SKILL_JUMP"
  
echo(this.data.SKILL_RUN); // Running,"Will allow you to run.",1,1.5
  
echo(this.data.SKILL_JUMP); // Jump,"Will allow you to jump."

  
echo(findvarbyid(1)); // Running,"Will allow you to run.",1,1.5
  
echo(findvarbyname("run")); // Running,"Will allow you to run.",1,1.5
  
echo(findidbyname("SKILL_RUN")); // 1
  
  
if (this.info.iscompiled) {
    echo(
"The file has been compiled through compile()!");
    
// echoes: The file has been compiled through compile()!
  
}

AND, I was bored once again . Enjoy.. my boredness?
__________________
Reply With Quote