Program commands
Added program commands like saving, loading, exiting a file or clearing the table, added example file including formulas
parent
33ed4534f0
commit
d2aa28c5b3
|
@ -1,4 +1,11 @@
|
||||||
1,2
|
1,5,=SUMME(A1:B4),,,,,,,,200
|
||||||
3,4
|
2,6,,,,,,,,,
|
||||||
5,6
|
3,7,,,,,,,,,
|
||||||
7,8
|
4,8,,=1+4*A2,,,2,,,4,
|
||||||
|
,,,,,3,3,,,,
|
||||||
|
,,,,,,,,,,
|
||||||
|
,,,,,,,,,,
|
||||||
|
,,,,,,,,,,
|
||||||
|
,,,,,,,,,,
|
||||||
|
,,,,,,,,69,,
|
||||||
|
,,,,,,,=STABW(K1:K11),,,100
|
||||||
|
|
|
|
@ -1,5 +1,6 @@
|
||||||
package de.hs_mannheim.informatik.spreadsheet;
|
package de.hs_mannheim.informatik.spreadsheet;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
@ -13,36 +14,21 @@ import java.util.regex.Pattern;
|
||||||
*/
|
*/
|
||||||
public class Axel {
|
public class Axel {
|
||||||
static Scanner keyboard = new Scanner(System.in);
|
static Scanner keyboard = new Scanner(System.in);
|
||||||
static Spreadsheet spr = new Spreadsheet(11,11);
|
static Spreadsheet spr = new Spreadsheet(11, 11);
|
||||||
|
static String saveFilePath = "Axel\\resources\\zahlen.csv";
|
||||||
|
|
||||||
public static void main(String[] args) throws FileNotFoundException {
|
public static void main(String[] args) throws FileNotFoundException {
|
||||||
System.out.println("Welcome to Axel (Totally not Excel)");
|
System.out.println("Welcome to Axel (Totally not Excel)");
|
||||||
System.out.println();
|
System.out.println();
|
||||||
/*
|
|
||||||
spr.put("A1", "1");
|
|
||||||
spr.put("A2", "1");
|
|
||||||
spr.put("A3", "123");
|
|
||||||
spr.put("B1", "2");
|
|
||||||
spr.put("B2", "4");
|
|
||||||
spr.put("B3", "1");
|
|
||||||
|
|
||||||
spr.put("B4", "=41+A2");
|
spr.loadSpecialTable();
|
||||||
spr.put("C5", "=7*6");
|
|
||||||
spr.put("D1", "=3/2");
|
|
||||||
*/
|
|
||||||
|
|
||||||
progLoad();
|
|
||||||
System.out.println(spr);
|
System.out.println(spr);
|
||||||
|
|
||||||
// spr.saveCsv("/tmp/test.csv");
|
// spr.saveCsv("/tmp/test.csv");
|
||||||
|
|
||||||
// DONE: You might want to put "UI loop" for entering value and formulas here resp. in some UI methods.
|
while (true) {
|
||||||
// TODO ME: Implement program commands
|
|
||||||
|
|
||||||
|
|
||||||
while(true) {
|
|
||||||
String userCommandPositionInput = userCommandPositionInput();
|
String userCommandPositionInput = userCommandPositionInput();
|
||||||
if (userCommandPositionInput.charAt(0) == '*'){
|
if (userCommandPositionInput.charAt(0) == '*') {
|
||||||
executeCommand(userCommandPositionInput);
|
executeCommand(userCommandPositionInput);
|
||||||
System.out.println(spr);
|
System.out.println(spr);
|
||||||
continue;
|
continue;
|
||||||
|
@ -60,25 +46,25 @@ public class Axel {
|
||||||
|
|
||||||
|
|
||||||
//? User input for a program command or a position
|
//? User input for a program command or a position
|
||||||
public static String userCommandPositionInput(){
|
public static String userCommandPositionInput() {
|
||||||
System.out.println();
|
System.out.println();
|
||||||
System.out.println("Input a command for the program or a position");
|
System.out.println("Input a command for the program or a position");
|
||||||
System.out.printf("List of program commands: *exit, *save, *load or *help %nFormat for position: A1 or B14%n");
|
System.out.printf("List of program commands: *clear, *load, *save, *exit or *help %nFormat for position: A1 or B14%n");
|
||||||
System.out.print("Input: ");
|
System.out.print("Input: ");
|
||||||
String userCommandPositionInput = keyboard.nextLine();
|
String userCommandPositionInput = keyboard.nextLine();
|
||||||
|
|
||||||
return userCommandPositionComputation(userCommandPositionInput);
|
return userCommandPositionComputation(userCommandPositionInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String userCommandPositionComputation(String userCommandPositionInput){
|
public static String userCommandPositionComputation(String userCommandPositionInput) {
|
||||||
|
|
||||||
if (userCommandPositionInput.isEmpty()){
|
if (userCommandPositionInput.isEmpty()) {
|
||||||
System.out.println("Input is empty!");
|
System.out.println("Input is empty!");
|
||||||
return userCommandPositionInput();
|
return userCommandPositionInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
//? Program command
|
//? Program command
|
||||||
if (userCommandPositionInput.charAt(0) == '*'){
|
if (userCommandPositionInput.charAt(0) == '*') {
|
||||||
if (!(userCommandErrorCheck(userCommandPositionInput))) {
|
if (!(userCommandErrorCheck(userCommandPositionInput))) {
|
||||||
System.out.println("Invalid command!");
|
System.out.println("Invalid command!");
|
||||||
return userCommandPositionInput();
|
return userCommandPositionInput();
|
||||||
|
@ -87,12 +73,12 @@ public class Axel {
|
||||||
}
|
}
|
||||||
|
|
||||||
//? Position
|
//? Position
|
||||||
if (!(userPositionErrorCheck(userCommandPositionInput, spr))){
|
if (!(userPositionErrorCheck(userCommandPositionInput, spr))) {
|
||||||
System.out.println("Invalid position!");
|
System.out.println("Invalid position!");
|
||||||
return userCommandPositionInput();
|
return userCommandPositionInput();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(userPositionBoundsErrorCheck(userCommandPositionInput, spr))){
|
if (!(userPositionBoundsErrorCheck(userCommandPositionInput, spr))) {
|
||||||
System.out.println("Position out of bounds!");
|
System.out.println("Position out of bounds!");
|
||||||
return userCommandPositionInput();
|
return userCommandPositionInput();
|
||||||
}
|
}
|
||||||
|
@ -100,35 +86,35 @@ public class Axel {
|
||||||
return userCommandPositionInput;
|
return userCommandPositionInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean userCommandErrorCheck(String CommandToCheck){
|
public static boolean userCommandErrorCheck(String CommandToCheck) {
|
||||||
//? true if valid
|
//? true if valid
|
||||||
//? valid inputs are: *exit, *save, *load, *help (and all upper case variants)
|
//? valid inputs are: *clear, *exit, *save, *load, *help (and all upper case variants)
|
||||||
|
|
||||||
CommandToCheck = CommandToCheck.toLowerCase();
|
CommandToCheck = CommandToCheck.toLowerCase();
|
||||||
if (CommandToCheck.equals("*exit") || CommandToCheck.equals("*save") || CommandToCheck.equals("*load") || CommandToCheck.equals("*help")){
|
if (CommandToCheck.equals("*clear") || CommandToCheck.equals("*exit") || CommandToCheck.equals("*save") || CommandToCheck.equals("*load") || CommandToCheck.equals("*help")) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean userPositionErrorCheck(String positionToCheck, Spreadsheet spr){
|
public static boolean userPositionErrorCheck(String positionToCheck, Spreadsheet spr) {
|
||||||
//? true if valid
|
//? true if valid
|
||||||
//? valid inputs are: A1, B14, C79, E99, F1, G99, J1, M98, ... (and all lower case variants)
|
//? valid inputs are: A1, B14, C79, E99, F1, G99, J1, M98, ... (and all lower case variants)
|
||||||
|
|
||||||
positionToCheck = positionToCheck.toUpperCase();
|
positionToCheck = positionToCheck.toUpperCase();
|
||||||
|
|
||||||
//? Check if input is the right length
|
//? Check if input is the right length
|
||||||
if (positionToCheck.length() < 2 || positionToCheck.length() > 3){
|
if (positionToCheck.length() < 2 || positionToCheck.length() > 3) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//? Check if input is in the right format
|
//? Check if input is in the right format
|
||||||
if (!(Character.isLetter(positionToCheck.charAt(0)) && Character.isDigit(positionToCheck.charAt(1)))){
|
if (!(Character.isLetter(positionToCheck.charAt(0)) && Character.isDigit(positionToCheck.charAt(1)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (positionToCheck.length() == 3){
|
if (positionToCheck.length() == 3) {
|
||||||
if (!(Character.isDigit(positionToCheck.charAt(2)))){
|
if (!(Character.isDigit(positionToCheck.charAt(2)))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -136,7 +122,7 @@ public class Axel {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean userPositionBoundsErrorCheck(String positionToCheck, Spreadsheet spr){
|
public static boolean userPositionBoundsErrorCheck(String positionToCheck, Spreadsheet spr) {
|
||||||
//? true if valid
|
//? true if valid
|
||||||
|
|
||||||
positionToCheck = positionToCheck.toUpperCase();
|
positionToCheck = positionToCheck.toUpperCase();
|
||||||
|
@ -150,7 +136,7 @@ public class Axel {
|
||||||
|
|
||||||
|
|
||||||
//? User input for a value or a formula
|
//? User input for a value or a formula
|
||||||
public static String userValueFormulaInput(String currentPos){
|
public static String userValueFormulaInput(String currentPos) {
|
||||||
System.out.println();
|
System.out.println();
|
||||||
System.out.printf("Input a value of a formula for the selected position: %s.%n", currentPos);
|
System.out.printf("Input a value of a formula for the selected position: %s.%n", currentPos);
|
||||||
System.out.printf("Format for a value: 7 or 1337 %nFormat for a formula: =7*6 or =SUMME(A1:A3)%n");
|
System.out.printf("Format for a value: 7 or 1337 %nFormat for a formula: =7*6 or =SUMME(A1:A3)%n");
|
||||||
|
@ -160,14 +146,14 @@ public class Axel {
|
||||||
return userValueFormulaComputation(userCommandInput, currentPos);
|
return userValueFormulaComputation(userCommandInput, currentPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String userValueFormulaComputation(String userValueFormulaInput, String currentPos){
|
public static String userValueFormulaComputation(String userValueFormulaInput, String currentPos) {
|
||||||
if (userValueFormulaInput.isEmpty()){
|
if (userValueFormulaInput.isEmpty()) {
|
||||||
System.out.println("Input is empty!");
|
System.out.println("Input is empty!");
|
||||||
return userValueFormulaInput(currentPos);
|
return userValueFormulaInput(currentPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
//? Formula
|
//? Formula
|
||||||
if (userValueFormulaInput.charAt(0) == '='){
|
if (userValueFormulaInput.charAt(0) == '=') {
|
||||||
if (!(userFormulaErrorCheck(userValueFormulaInput))) {
|
if (!(userFormulaErrorCheck(userValueFormulaInput))) {
|
||||||
System.out.println("Invalid formula!");
|
System.out.println("Invalid formula!");
|
||||||
return userValueFormulaInput(currentPos);
|
return userValueFormulaInput(currentPos);
|
||||||
|
@ -176,7 +162,7 @@ public class Axel {
|
||||||
}
|
}
|
||||||
|
|
||||||
//? Value
|
//? Value
|
||||||
if (!(userValueErrorCheck(userValueFormulaInput))){
|
if (!(userValueErrorCheck(userValueFormulaInput))) {
|
||||||
System.out.println("Invalid value!");
|
System.out.println("Invalid value!");
|
||||||
return userValueFormulaInput(currentPos);
|
return userValueFormulaInput(currentPos);
|
||||||
}
|
}
|
||||||
|
@ -184,59 +170,56 @@ public class Axel {
|
||||||
return userValueFormulaInput;
|
return userValueFormulaInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean userFormulaErrorCheck(String formulaToCheck){
|
public static boolean userFormulaErrorCheck(String formulaToCheck) {
|
||||||
//? true if valid
|
//? true if valid
|
||||||
//? valid inputs are: =7*6, =SUM(A1:A3), =A1, =A1+A2, =A1-A2, ... (and all lower case variants)
|
//? valid inputs are: =7*6, =SUM(A1:A3), =A1, =A1+A2, =A1-A2, ... (and all lower case variants)
|
||||||
|
|
||||||
//TODO ME: Formula format check, maybe too much work
|
|
||||||
//TODO ME: Check if formula vars are in bounds
|
|
||||||
|
|
||||||
//? remove '=' at the beginning and make everything upper case
|
//? remove '=' at the beginning and make everything upper case
|
||||||
formulaToCheck = formulaToCheck.toUpperCase().substring(1);
|
formulaToCheck = formulaToCheck.toUpperCase().substring(1);
|
||||||
|
|
||||||
if (formulaToCheck.startsWith("SUMME(") || formulaToCheck.startsWith("PRODUKT(") || formulaToCheck.startsWith("MITTELWERT(") || formulaToCheck.startsWith("STABW(") || formulaToCheck.startsWith("MIN(") || formulaToCheck.startsWith("MAX(")){
|
if (formulaToCheck.startsWith("SUMME(") || formulaToCheck.startsWith("PRODUKT(") || formulaToCheck.startsWith("MITTELWERT(") || formulaToCheck.startsWith("STABW(") || formulaToCheck.startsWith("MIN(") || formulaToCheck.startsWith("MAX(")) {
|
||||||
return userFormulaFunctionErrorCheck(formulaToCheck);
|
return userFormulaFunctionErrorCheck(formulaToCheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
return userFormulaExpressionErrorCheck(formulaToCheck);
|
return userFormulaExpressionErrorCheck(formulaToCheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean userFormulaFunctionErrorCheck(String functionToCheck){
|
public static boolean userFormulaFunctionErrorCheck(String functionToCheck) {
|
||||||
String[] functionCorners = spr.isolateFunctionCorners(functionToCheck);
|
String[] functionCorners = spr.isolateFunctionCorners(functionToCheck);
|
||||||
|
|
||||||
if (functionCorners.length != 2){
|
if (functionCorners.length != 2) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String functionCorner: functionCorners){
|
for (String functionCorner : functionCorners) {
|
||||||
if (!(spr.isValueCellName(functionCorner).equals("cellName"))){
|
if (!(spr.isValueCellName(functionCorner).equals("cellName"))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!userPositionBoundsErrorCheck(functionCorner, spr)){
|
if (!userPositionBoundsErrorCheck(functionCorner, spr)) {
|
||||||
System.out.print("Out of bounds - ");
|
System.out.print("Out of bounds - ");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (functionToCheck.startsWith("MITTELWERT(") || functionToCheck.startsWith("STABW(")) {
|
if (functionToCheck.startsWith("MITTELWERT(") || functionToCheck.startsWith("STABW(")) {
|
||||||
String[] functionBlock= spr.wholeFunctionBlock(functionToCheck);
|
String[] functionBlock = spr.wholeFunctionBlock(functionToCheck);
|
||||||
boolean allEmpty = true;
|
boolean allEmpty = true;
|
||||||
|
|
||||||
for (String cell : functionBlock) {
|
for (String cell : functionBlock) {
|
||||||
if (!cell.isEmpty()){
|
if (!cell.isEmpty()) {
|
||||||
allEmpty = false;
|
allEmpty = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (allEmpty){
|
if (allEmpty) {
|
||||||
System.out.print("Division by zero - ");
|
System.out.print("Division by zero - ");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (functionToCheck.startsWith("STABW(")) {
|
if (functionToCheck.startsWith("STABW(")) {
|
||||||
String[] functionBlock= spr.wholeFunctionBlock(functionToCheck);
|
String[] functionBlock = spr.wholeFunctionBlock(functionToCheck);
|
||||||
String[] notEmptyValues = spr.extractNotEmptyCells(functionBlock);
|
String[] notEmptyValues = spr.extractNotEmptyCells(functionBlock);
|
||||||
|
|
||||||
if (notEmptyValues.length < 2){
|
if (notEmptyValues.length < 2) {
|
||||||
System.out.print("Division by zero - ");
|
System.out.print("Division by zero - ");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -244,12 +227,12 @@ public class Axel {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean userFormulaExpressionErrorCheck(String expressionToCheck){
|
public static boolean userFormulaExpressionErrorCheck(String expressionToCheck) {
|
||||||
|
//TODO ME: Maybe not worth the time
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean userValueErrorCheck(String valueToCheck){
|
public static boolean userValueErrorCheck(String valueToCheck) {
|
||||||
//? true if valid
|
//? true if valid
|
||||||
//? valid inputs are: 7, 1337, 0, , -213,...
|
//? valid inputs are: 7, 1337, 0, , -213,...
|
||||||
|
|
||||||
|
@ -257,48 +240,64 @@ public class Axel {
|
||||||
// String digitCheckRegex = "-?\\d+(\\.\\d+)?";
|
// String digitCheckRegex = "-?\\d+(\\.\\d+)?";
|
||||||
//? For integers
|
//? For integers
|
||||||
String digitCheckRegex = "-?\\d+";
|
String digitCheckRegex = "-?\\d+";
|
||||||
if (!(valueToCheck.matches(digitCheckRegex))){
|
if (!(valueToCheck.matches(digitCheckRegex))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void executeCommand(String command) {
|
public static void executeCommand(String command) throws FileNotFoundException {
|
||||||
System.out.printf("Executing command: %s%n", command);
|
switch (command) {
|
||||||
//TODO ME:
|
case "*clear":
|
||||||
switch (command){
|
progClear();
|
||||||
|
break;
|
||||||
|
|
||||||
case "*load":
|
case "*load":
|
||||||
progLoad();
|
progLoad();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case "*save":
|
||||||
|
progSave();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case "*exit":
|
||||||
|
progExit();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void progLoad(){
|
private static void progClear(){
|
||||||
int rows = spr.getRowsLCount();
|
System.out.println("Are you sure you want to clear the table? (yes/no)");
|
||||||
int cols = spr.getColsCount();
|
System.out.print("Input: ");
|
||||||
|
String userClearInput = keyboard.nextLine().toLowerCase();
|
||||||
|
|
||||||
for (int r = 0; r < rows; r++){
|
if (userClearInput.equals("yes") || userClearInput.equals("y")){
|
||||||
for (int c = 0; c < cols; c++){
|
spr.clearTable();
|
||||||
spr.cells[r][c].setValue("");
|
System.out.println("Table cleared!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spr.put("A1", "1");
|
|
||||||
spr.put("A2", "2");
|
|
||||||
spr.put("A3", "3");
|
|
||||||
spr.put("A4", "4");
|
|
||||||
spr.put("B1", "5");
|
|
||||||
spr.put("B2", "6");
|
|
||||||
spr.put("B3", "7");
|
|
||||||
spr.put("B4", "8");
|
|
||||||
spr.put("K1", "200");
|
|
||||||
spr.put("K11", "100");
|
|
||||||
spr.put("J4", "4");
|
|
||||||
spr.put("I10", "69");
|
|
||||||
spr.put("F5", "3");
|
|
||||||
spr.put("G4", "2");
|
|
||||||
spr.put("G5", "3");
|
|
||||||
|
|
||||||
|
private static void progLoad() throws FileNotFoundException {
|
||||||
|
spr.readCsv(saveFilePath, ",", "Amogus");
|
||||||
|
System.out.println("File loaded!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void progSave() throws FileNotFoundException {
|
||||||
|
String savePath = saveFilePath;
|
||||||
|
spr.saveCsv(savePath);
|
||||||
|
System.out.println("File saved");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void progExit() throws FileNotFoundException {
|
||||||
|
System.out.println("Do you want to save befor you exit? (yes/no)");
|
||||||
|
System.out.print("Input: ");
|
||||||
|
String userExitInput = keyboard.nextLine().toLowerCase();
|
||||||
|
|
||||||
|
if (userExitInput.equals("yes") || userExitInput.equals("y")) {
|
||||||
|
progSave();
|
||||||
|
}
|
||||||
|
System.out.println("Goodbye!");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,10 +1,12 @@
|
||||||
package de.hs_mannheim.informatik.spreadsheet;
|
package de.hs_mannheim.informatik.spreadsheet;
|
||||||
|
|
||||||
import javax.naming.ldap.spi.LdapDnsProviderResult;
|
import javax.naming.ldap.spi.LdapDnsProviderResult;
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Scanner;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
@ -24,8 +26,6 @@ public class Spreadsheet {
|
||||||
*/
|
*/
|
||||||
public Spreadsheet(int rows, int cols) {
|
public Spreadsheet(int rows, int cols) {
|
||||||
|
|
||||||
// TODO limit the maximum size on 99 (1..99) rows and 26 (A..Z) columns
|
|
||||||
|
|
||||||
if (rows > 99){
|
if (rows > 99){
|
||||||
System.out.printf("Row size %d is bigger then 99, value will be set to 99! %n", rows);
|
System.out.printf("Row size %d is bigger then 99, value will be set to 99! %n", rows);
|
||||||
rows = 99;
|
rows = 99;
|
||||||
|
@ -58,6 +58,7 @@ public class Spreadsheet {
|
||||||
if (!value.startsWith("="))
|
if (!value.startsWith("="))
|
||||||
cells[row][col].setValue(value);
|
cells[row][col].setValue(value);
|
||||||
else {
|
else {
|
||||||
|
System.out.printf("Formula: %s %n", value);
|
||||||
cells[row][col].setFormula(value);
|
cells[row][col].setFormula(value);
|
||||||
evaluateCell(row, col);
|
evaluateCell(row, col);
|
||||||
}
|
}
|
||||||
|
@ -85,24 +86,62 @@ public class Spreadsheet {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A method for reading in data from a CSV file.
|
* A method for reading in data from a CSV file.
|
||||||
* @param path The file to read.
|
* @param filePath The file to read.
|
||||||
* @param separator The char used to split up the input, e.g. a comma or a semicolon.
|
* @param separator The char used to split up the input, e.g. a comma or a semicolon.
|
||||||
* @param startCellName The upper left cell where data from the CSV file should be inserted.
|
* @param startCellName The upper left cell where data from the CSV file should be inserted.
|
||||||
* @return Nothing.
|
* @return Nothing.
|
||||||
* @exception IOException If path does not exist.
|
* @exception IOException If path does not exist.
|
||||||
*/
|
*/
|
||||||
public void readCsv(String path, char separator, String startCellName) throws FileNotFoundException {
|
public void readCsv(String filePath, String separator, String startCellName) throws FileNotFoundException {
|
||||||
// TODO: implement this
|
ArrayList<String> fileRows = new ArrayList<>();
|
||||||
|
Scanner sc = new Scanner(new File(filePath));
|
||||||
|
|
||||||
|
while (sc.hasNextLine()) {
|
||||||
|
fileRows.add(sc.nextLine());
|
||||||
|
}
|
||||||
|
clearTable();
|
||||||
|
|
||||||
|
ArrayList <int[]> formulas = new ArrayList<>();
|
||||||
|
|
||||||
|
for (int rowI = 0; rowI < fileRows.size(); rowI++) {
|
||||||
|
String row = fileRows.get(rowI);
|
||||||
|
String[] cells = row.split(separator);
|
||||||
|
|
||||||
|
for (int colI = 0; colI < cells.length; colI++) {
|
||||||
|
String cellContent = cells[colI].toUpperCase();
|
||||||
|
|
||||||
|
if (cellContent.startsWith("=")){
|
||||||
|
formulas.add(new int[]{rowI, colI});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
put(rowI, colI, cellContent);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int[] formulaPos : formulas){
|
||||||
|
int rowI = formulaPos[0];
|
||||||
|
int colI = formulaPos[1];
|
||||||
|
System.out.printf("Formula at %d-%d %n", rowI, colI);
|
||||||
|
|
||||||
|
String row = fileRows.get(rowI);
|
||||||
|
String formulaToFill = row.split(separator)[colI];
|
||||||
|
|
||||||
|
put(rowI, colI, formulaToFill);
|
||||||
|
}
|
||||||
|
|
||||||
|
sc.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A method for saving data to a CSV file.
|
* A method for saving data to a CSV file.
|
||||||
* @param path The file to write.
|
* @param filePath The file to write.
|
||||||
* @return Nothing.
|
* @return Nothing.
|
||||||
* @exception IOException If path does not exist.
|
* @exception FileNotFoundException If path does not exist.
|
||||||
*/
|
*/
|
||||||
public void saveCsv(String path) throws FileNotFoundException {
|
public void saveCsv(String filePath) throws FileNotFoundException {
|
||||||
PrintWriter out = new PrintWriter(path);
|
PrintWriter out = new PrintWriter(filePath);
|
||||||
|
|
||||||
for (Cell[] row : cells) {
|
for (Cell[] row : cells) {
|
||||||
for (Cell cell : row) {
|
for (Cell cell : row) {
|
||||||
|
@ -129,6 +168,7 @@ public class Spreadsheet {
|
||||||
|
|
||||||
private void evaluateCell(int row, int col) {
|
private void evaluateCell(int row, int col) {
|
||||||
String formula = cells[row][col].getFormula();
|
String formula = cells[row][col].getFormula();
|
||||||
|
System.out.printf("Formel in eval: %s %n", formula);
|
||||||
String result = "";
|
String result = "";
|
||||||
|
|
||||||
if (formula.startsWith("SUMME(")) // e.g. SUMME(A3:A8)
|
if (formula.startsWith("SUMME(")) // e.g. SUMME(A3:A8)
|
||||||
|
@ -451,6 +491,36 @@ public class Spreadsheet {
|
||||||
return cells[0].length;
|
return cells[0].length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearTable() {
|
||||||
|
int rows = getRowsLCount();
|
||||||
|
int cols = getColsCount();
|
||||||
|
|
||||||
|
for (int r = 0; r < rows; r++) {
|
||||||
|
for (int c = 0; c < cols; c++) {
|
||||||
|
cells[r][c].setValue("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void loadSpecialTable(){
|
||||||
|
clearTable();
|
||||||
|
|
||||||
|
put("A1", "1");
|
||||||
|
put("A2", "2");
|
||||||
|
put("A3", "3");
|
||||||
|
put("A4", "4");
|
||||||
|
put("B1", "5");
|
||||||
|
put("B2", "6");
|
||||||
|
put("B3", "7");
|
||||||
|
put("B4", "8");
|
||||||
|
put("K1", "200");
|
||||||
|
put("K11", "100");
|
||||||
|
put("J4", "4");
|
||||||
|
put("I10", "69");
|
||||||
|
put("F5", "3");
|
||||||
|
put("G4", "2");
|
||||||
|
put("G5", "3");
|
||||||
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
Loading…
Reference in New Issue