{ $pos = stripos($this->data, ""); if($pos == false) //did we find the end of headers? { echo "Error: Adif_Parser Already Initialized or No in ADIF File"; return 0; }; $this->i = $pos+5; //iterate past the if($this->i >= strlen($this->data)) //is this the end of the file? { echo "Error: ADIF File Does Not Contain Any QSOs"; return 0; }; return 1; } public function feed($input_data) //allows the parser to be fed a string { $this->data = $input_data; } public function load_from_file($fname) //allows the user to accept a filename as input { $this->data = file_get_contents($fname); } //the following function does the processing of the array into its key and value pairs public function record_to_array($record) { $return = array(); for($a = 0; $a < strlen($record); $a++) { if($record[$a] == '<') //find the start of the tag { $tag_name = ""; $value = ""; $len_str = ""; $len = 0; $a++; //go past the < while($record[$a] != ':') //get the tag { $tag_name = $tag_name.$record[$a]; //append this char to the tag name $a++; }; $a++; //iterate past the colon while($record[$a] != '>' && $record[$a] != ':') { $len_str = $len_str.$record[$a]; $a++; }; if($record[$a] == ':') { while($record[$a] != '>') { $a++; }; }; $a++; //iterate over the > $len = (int)$len_str; while($len > 0) { $value = $value.$record[$a]; $len--; $a++; }; $return[strtolower($tag_name)] = $value; }; }; return $return; } //finds the next record in the file public function get_record() { if($this->i >= strlen($this->data)) { return array(); //return nothing }; $end = stripos($this->data, "", $this->i); if($end == false) //is this the end? { return array(); //return nothing }; $record = substr($this->data, $this->i, $end-$this->i); $this->i = $end+5; return $this->record_to_array($record); //process and return output } } ?>