protected void readData(Reader in) throws IOException{
        String line, value;
        int i, j, s;
        
        String label;
        
        float curVal[];
        
        while ((line = readLine(in)) != null){
            bytesRead += line.length();

            float progress = (float)bytesRead / filesize;
            fireProgressEvent(new ProgressEvent(this, ProgressEvent.PROGRESS_UPDATE, progress, "loading file"));

            StringTokenizer str = new StringTokenizer(line);
            curVal = new float[numDimensions];
            
            j=0;
            s=0;
            label = null;
            
            for (i = 0; i<tempNumDimensions; i++){
                value = str.nextToken();
//                System.out.println("value " + i + ": " + value);
                
                if (!isStringLabel[i]) {
                    try {
                        float val = Float.parseFloat(value);
                        curVal[j++] = val;
                    }
                    catch (NumberFormatException nfe){
                        System.out.println("Invalid Number Format: " + nfe.getMessage() + " -> discarding & setting 0.0f");
                        curVal[j++] = 0.0f;
                    }
                }
                else {
                    value = value.replace('_',' ');
                    value = value.substring(0,1).toUpperCase() + value.substring(1);
                    
                    int spcidx = 0;
                    while ((spcidx = value.indexOf(' ', spcidx+1)) != -1){
                        value = value.substring(0,spcidx+1) + value.substring(spcidx+1,spcidx+2).toUpperCase() + value.substring(spcidx+2);
                    }
                        
                    if (label == null) {
                        label = stringLabels.elementAt(s++) + ": " + value;
                    }
                    else {
                        label += "\n" + stringLabels.elementAt(s++) + ": " + value;
                    }
                }
                                
            }
            
            addRecord(curVal, label);
                
        }
    }