{ $pos = stripos(strtoupper($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; }; //get headers $this->i = 0; $in_tag = false; $tag = ""; $value_length = ""; $value = ""; while($this->i < $pos) { //skip comments if($this->data[$this->i] == "#") { while($this->i < $pos) { if($this->data[$this->i] == "\n") { break; } $this->i++; } }else{ //find the beginning of a tag if($this->data[$this->i] == "<") { $this->i++; //record the key while($this->data[$this->i] < $pos && $this->data[$this->i] != ':') { $tag = $tag.$this->data[$this->i]; $this->i++; } $this->i++; //iterate past the : //find out how long the value is while($this->data[$this->i] < $pos && $this->data[$this->i] != '>') { $value_length = $value_length.$this->data[$this->i]; $this->i++; } $this->i++; //iterate past the > $len = (int)$value_length; //copy the value into the buffer while($len > 0 && $this->i < $pos) { $value = $value.$this->data[$this->i]; $len--; $this->i++; }; $this->headers[strtolower(trim($tag))] = $value; //convert it to lowercase and trim it in case of \r //clear all of our variables $tag = ""; $value_length = ""; $value = ""; } } $this->datasplit = preg_split("//i", substr($this->data, $this->i)); $this->i++; }; $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 = $string = mb_convert_encoding(file_get_contents($fname), "UTF-8"); } //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++; }; }; $len = (int)$len_str; while($len > 0) { $a++; $value = $value.$record[$a]; $len--; }; $return[strtolower($tag_name)] = $value; }; //skip comments if($record[$a] == "#") { while($a < strlen($record)) { if($record[$a] == "\n") { break; } $a++; } } }; return $return; } //finds the next record in the file public function get_record() { // Are we at the end of the array containing the QSOs? if($this->currentarray >= count($this->datasplit)) { return array(); //return nothing } else { // Is this a valid QSO? if (stristr($this->datasplit[$this->currentarray],"record_to_array($this->datasplit[$this->currentarray++]); //process and return output } else { return array(); } } } public function get_header($key) { if(array_key_exists(strtolower($key), $this->headers)) { return $this->headers[strtolower($key)]; }else{ return NULL; } } } ?>