more visicalc

This commit is contained in:
Denis Molony 2017-02-25 21:30:56 +11:00
parent 119d8472bd
commit d4a7eef03c
7 changed files with 75 additions and 156 deletions

View File

@ -1,8 +1,14 @@
package com.bytezone.diskbrowser.visicalc; package com.bytezone.diskbrowser.visicalc;
import java.util.ArrayList;
import java.util.List;
public abstract class AbstractValue implements Value public abstract class AbstractValue implements Value
{ {
protected final String typeText; protected final String typeText;
protected double value;
protected ValueType valueType = ValueType.VALUE;
protected List<Value> values = new ArrayList<Value> ();
public AbstractValue (String typeText) public AbstractValue (String typeText)
{ {
@ -14,4 +20,36 @@ public abstract class AbstractValue implements Value
{ {
return typeText; return typeText;
} }
@Override
public ValueType getValueType ()
{
return valueType;
}
@Override
public boolean isValueType (ValueType type)
{
return valueType == type;
}
@Override
public double getValue ()
{
return value;
}
@Override
public String getText ()
{
switch (valueType)
{
case NA:
return "NA";
case ERROR:
return "Error";
default:
return "";
}
}
} }

View File

@ -10,12 +10,11 @@ class Cell extends AbstractValue implements Comparable<Cell>
private final Sheet parent; private final Sheet parent;
private CellType cellType; private CellType cellType;
private final Format format = new Format (); private final Format format = new Format ();
private String expressionText;
private String repeatingText; private String repeatingText;
private String repeat = ""; private String repeat = "";
private String label; private String label;
private String expressionText;
private Value value; private Value value;
enum CellType enum CellType
@ -84,6 +83,8 @@ class Cell extends AbstractValue implements Comparable<Cell>
// FUTURE.VC // FUTURE.VC
if (false) if (false)
{
System.out.println ("****** Hardcoded values ******");
if (address.rowKey == 67) if (address.rowKey == 67)
expressionText = "1000"; expressionText = "1000";
else if (address.rowKey == 131) else if (address.rowKey == 131)
@ -92,9 +93,12 @@ class Cell extends AbstractValue implements Comparable<Cell>
expressionText = "12"; expressionText = "12";
else if (address.rowKey == 259) else if (address.rowKey == 259)
expressionText = "8"; expressionText = "8";
}
// IRA.VC // IRA.VC
if (true) if (false)
{
System.out.println ("****** Hardcoded values ******");
if (address.rowKey == 66) if (address.rowKey == 66)
expressionText = "10"; expressionText = "10";
else if (address.rowKey == 130) else if (address.rowKey == 130)
@ -105,9 +109,12 @@ class Cell extends AbstractValue implements Comparable<Cell>
expressionText = "1000"; expressionText = "1000";
else if (address.rowKey == 386) else if (address.rowKey == 386)
expressionText = "15"; expressionText = "15";
}
// CARLOAN.VC // CARLOAN.VC
if (false) if (false)
{
System.out.println ("****** Hardcoded values ******");
if (address.rowKey == 67) if (address.rowKey == 67)
expressionText = "9375"; expressionText = "9375";
else if (address.rowKey == 131) else if (address.rowKey == 131)
@ -116,6 +123,7 @@ class Cell extends AbstractValue implements Comparable<Cell>
expressionText = "24"; expressionText = "24";
else if (address.rowKey == 259) else if (address.rowKey == 259)
expressionText = "11.9"; expressionText = "11.9";
}
} }
// format cell value for output // format cell value for output
@ -193,8 +201,10 @@ class Cell extends AbstractValue implements Comparable<Cell>
expressionText = ""; expressionText = "";
Expression expression = new Expression (parent, expressionText); Expression expression = new Expression (parent, expressionText);
value = expression.size () == 1 ? expression.get (0) : expression; // value = expression.size () == 1 ? expression.get (0) : expression;
value = expression.reduce ();
} }
value.calculate (); value.calculate ();
return this; return this;
@ -228,8 +238,6 @@ class Cell extends AbstractValue implements Comparable<Cell>
text.append (String.format ("| VALUE : %-69s |%n", expressionText)); text.append (String.format ("| VALUE : %-69s |%n", expressionText));
if (value == null) if (value == null)
text.append (String.format ("| Value : %-69s |%n", "null")); text.append (String.format ("| Value : %-69s |%n", "null"));
// else if (value instanceof Expression)
// text.append (getExpressionComponents ((Expression) value, 1));
else else
text.append (getValueText (value, 0)); text.append (getValueText (value, 0));
break; break;
@ -257,31 +265,19 @@ class Cell extends AbstractValue implements Comparable<Cell>
String.format ("| %-10s : %-69s |%n", typeText, value.getValueType ())); String.format ("| %-10s : %-69s |%n", typeText, value.getValueType ()));
if (value instanceof Expression) if (value instanceof Expression)
text.append (getExpressionComponents ((Expression) value, depth + 1)); {
text.append (
String.format ("| Expression : %-69s |%n", ((Expression) value).fullText ()));
for (Value v : (Expression) value)
text.append (getValueText (v, depth + 1));
}
else if (value instanceof Function) else if (value instanceof Function)
text.append (getFunctionComponents ((Function) value, depth + 1)); {
text.append (
return text.toString (); String.format ("| Function : %-69s |%n", ((Function) value).fullText));
} for (Value v : (Function) value)
text.append (getValueText (v, depth + 1));
private String getExpressionComponents (Expression expression, int depth) }
{
StringBuilder text = new StringBuilder ();
text.append (String.format ("| Expression : %-69s |%n", expression.fullText ()));
for (Value value : expression)
text.append (getValueText (value, depth));
return text.toString ();
}
private String getFunctionComponents (Function function, int depth)
{
StringBuilder text = new StringBuilder ();
text.append (String.format ("| Function : %-69s |%n", function.fullText));
for (Value value : function)
text.append (getValueText (value, depth));
return text.toString (); return text.toString ();
} }

View File

@ -3,7 +3,7 @@ package com.bytezone.diskbrowser.visicalc;
import com.bytezone.diskbrowser.visicalc.Value.ValueType; import com.bytezone.diskbrowser.visicalc.Value.ValueType;
// Predicate // Predicate
class Condition class Condition //extends AbstractValue
{ {
private static final String[] comparators = { "<>", "<=", ">=", "=", "<", ">" }; private static final String[] comparators = { "<>", "<=", ">=", "=", "<", ">" };
@ -18,8 +18,8 @@ class Condition
public Condition (Sheet parent, String text) public Condition (Sheet parent, String text)
{ {
// super ("Condition");
this.parent = parent; this.parent = parent;
// System.out.println (text);
for (String comp : comparators) for (String comp : comparators)
{ {

View File

@ -29,12 +29,10 @@ class Expression extends AbstractValue implements Iterable<Value>
// [.3*(B4+B7+B8+B9)] // [.3*(B4+B7+B8+B9)]
// [+N12+(P12*(.2*K12+K9-O12))] // [+N12+(P12*(.2*K12+K9-O12))]
private final List<Value> values = new ArrayList<Value> (); // private final List<Value> values = new ArrayList<Value> ();
private final List<String> operators = new ArrayList<String> (); private final List<String> operators = new ArrayList<String> ();
private final List<String> signs = new ArrayList<String> (); private final List<String> signs = new ArrayList<String> ();
private ValueType valueType = ValueType.VALUE;
private double value;
private String text; private String text;
public Expression (Sheet parent, String text) public Expression (Sheet parent, String text)
@ -128,6 +126,13 @@ class Expression extends AbstractValue implements Iterable<Value>
System.out.printf ("Nothing[%s]%n", text); System.out.printf ("Nothing[%s]%n", text);
} }
Value reduce ()
{
if (values.size () == 1 && signs.get (0).equals ("(+)"))
return values.get (0);
return this;
}
int size () int size ()
{ {
return values.size (); return values.size ();
@ -210,48 +215,6 @@ class Expression extends AbstractValue implements Iterable<Value>
return this; return this;
} }
@Override
public ValueType getValueType ()
{
return valueType;
}
@Override
public boolean isValueType (ValueType type)
{
return valueType == type;
}
@Override
public double getValue ()
{
return value;
}
@Override
public String getText ()
{
if (valueType == null && values.size () > 0)
calculate ();
if (valueType == null)
{
System.out.printf ("null valuetype in exp [%s]%n", text);
System.out.println (values.size ());
}
switch (valueType)
{
case NA:
return "NA";
case ERROR:
return "Error";
// case NAN:
// return "NaN";
default:
return "???";
}
}
private String checkBrackets (String input) private String checkBrackets (String input)
{ {
String line = input.trim (); String line = input.trim ();

View File

@ -1,8 +1,6 @@
package com.bytezone.diskbrowser.visicalc; package com.bytezone.diskbrowser.visicalc;
import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List;
// http://www.bricklin.com/history/refcard1.htm // http://www.bricklin.com/history/refcard1.htm
// Functions: // Functions:
@ -33,10 +31,7 @@ abstract class Function extends AbstractValue implements Iterable<Value>
protected String functionText; protected String functionText;
protected String fullText; protected String fullText;
protected ValueType valueType; // protected List<Value> values = new ArrayList<Value> ();
protected double value;
protected List<Value> values = new ArrayList<Value> ();
static Function getInstance (Sheet parent, String text) static Function getInstance (Sheet parent, String text)
{ {
@ -118,40 +113,6 @@ abstract class Function extends AbstractValue implements Iterable<Value>
} }
} }
@Override
public ValueType getValueType ()
{
return valueType;
}
@Override
public boolean isValueType (ValueType type)
{
return valueType == type;
}
@Override
public double getValue ()
{
return value;
}
@Override
public String getText ()
{
switch (valueType)
{
case NA:
return "NA";
case ERROR:
return "Error";
// case NAN:
// return "NaN";
default:
return "";
}
}
@Override @Override
public Iterator<Value> iterator () public Iterator<Value> iterator ()
{ {

View File

@ -12,7 +12,6 @@ class If extends Function
public If (Sheet parent, String text) public If (Sheet parent, String text)
{ {
super (parent, text); super (parent, text);
// System.out.println (text);
int pos1 = functionText.indexOf (','); int pos1 = functionText.indexOf (',');
int pos2 = functionText.indexOf (',', pos1 + 1); int pos2 = functionText.indexOf (',', pos1 + 1);

View File

@ -2,9 +2,6 @@ package com.bytezone.diskbrowser.visicalc;
class Number extends AbstractValue class Number extends AbstractValue
{ {
private double value;
private ValueType valueType;
public Number (String text) public Number (String text)
{ {
super ("Constant"); super ("Constant");
@ -12,7 +9,6 @@ class Number extends AbstractValue
try try
{ {
value = Double.parseDouble (text); value = Double.parseDouble (text);
valueType = ValueType.VALUE;
} }
catch (NumberFormatException e) catch (NumberFormatException e)
{ {
@ -21,49 +17,15 @@ class Number extends AbstractValue
} }
} }
@Override
public boolean isValueType (ValueType type)
{
return valueType == type;
}
@Override @Override
public String toString () public String toString ()
{ {
return String.format ("Number: %f", value); return String.format ("Number: %f", value);
} }
@Override
public double getValue ()
{
return value;
}
@Override
public String getText ()
{
switch (valueType)
{
case NA:
return "NA";
case ERROR:
return "Error";
// case NAN:
// return "NaN";
default:
return "";
}
}
@Override @Override
public Value calculate () public Value calculate ()
{ {
return this; return this;
} }
@Override
public ValueType getValueType ()
{
return valueType;
}
} }