user3667111
user3667111

Reputation:

Adding data from .txt document to array

Below is what the text document looks like. The first line is the number of elements that I want the array to contain. The second is the ID for the product, separated by # and the third line is the total price of the products once again separated by #

10
PA/1234#PV/5732#Au/9271#DT/9489#HY/7195#ZR/7413#bT/4674#LR/4992#Xk/8536#kD/9767#
153#25#172#95#235#159#725#629#112#559#

I want to use the following method to pass inputFile to the readProductDataFile method:

public static Product[] readProductDataFile(File inputFile){
    // Code here
}

I want to create an array of size 10, or maybe an arrayList. Preferably to be a concatenation of Customer ID and the price, such as Array[1] = PA/1234_153

Upvotes: 2

Views: 70

Answers (5)

adrCoder
adrCoder

Reputation: 3275

There you go the full class, does exactly what you want:

import java.io.BufferedReader; 
import java.io.FileReader;
import java.util.Arrays;
import java.io.FileNotFoundException;
import java.io.IOException;
class myRead{
    public static void main(String[] args) throws FileNotFoundException, IOException {
        BufferedReader inputFile = new BufferedReader(new FileReader("test.txt")); 
        String numberOfElements = inputFile.readLine();
        //this is the first line which contains the number "10"
        //System.out.println(numberOfElements);
        String secondLine = inputFile.readLine();
        //this is the second line which contains your data, split it using "#" as a delimiter
        String[] strArray = secondLine.split("#");
        //System.out.println(Arrays.toString(strArray));
        //System.out.println(strArray[0]);
        String thirdLine = inputFile.readLine();
        //this is the third line which contains your data, split it using "#" as a delimiter
        String[] dataArray = thirdLine.split("#");
        //combine arrays
        String[] combinedArray = new String[strArray.length];
        for (int i=0;i<strArray.length;i++) {
        combinedArray[i]=strArray[i]+"_"+dataArray[i];
        System.out.println(combinedArray[i]);
        }
}
}

OUTPUT:

PA/1234_153
PV/5732_25
Au/9271_172
DT/9489_95
HY/7195_235
ZR/7413_159
bT/4674_725
LR/4992_629
Xk/8536_112
kD/9767_559

The trick in what I am doing is using a BufferedReader to read the file, readLine to read each of the three lines, split("#"); to split each token using the # as the delimiter and create the arrays, and combinedArray[i]=strArray[i]+"_"+dataArray[i]; to put the elements in a combined array as you want...!

public static Product[] readProductDataFile(File inputFile){
BufferedReader inputFile = new BufferedReader(new FileReader(inputFile));
// the rest of my previous code goes here 

EDIT: Everything together with calling a separate method from inside the main, with the file as an input argument!

import java.io.BufferedReader; 
import java.io.FileReader;
import java.util.Arrays;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.File;
class myRead{
    public static void main(String[] args) throws FileNotFoundException, IOException {
        File myFile = new File("test.txt"); 
        readProductDataFile(myFile);
        }
        public static String[] readProductDataFile(File inputFile) throws FileNotFoundException, IOException{
        BufferedReader myReader = new BufferedReader(new FileReader("test.txt")); 
        String numberOfElements = myReader.readLine();
        //this is the first line which contains the number "10"
        //System.out.println(numberOfElements);
        String secondLine = myReader.readLine();
        //this is the second line which contains your data, split it using "#" as a delimiter
        String[] strArray = secondLine.split("#");
        //System.out.println(Arrays.toString(strArray));
        //System.out.println(strArray[0]);
        String thirdLine = myReader.readLine();
        //this is the third line which contains your data, split it using "#" as a delimiter
        String[] dataArray = thirdLine.split("#");
        //combine arrays
        String[] combinedArray = new String[strArray.length];
        for (int i=0;i<strArray.length;i++) {
        combinedArray[i]=strArray[i]+"_"+dataArray[i];
        System.out.println(combinedArray[i]);
}
        return combinedArray;
}
}

OUTPUT

PA/1234_153
PV/5732_25
Au/9271_172
DT/9489_95
HY/7195_235
ZR/7413_159
bT/4674_725
LR/4992_629
Xk/8536_112
kD/9767_559

Upvotes: 2

pavan
pavan

Reputation: 16

You can try this way .. Reading line by line and storing each row in a array. Use while storing so it will split and save .

String[] strArray = secondLine.split("#");

Now use the for loop and concat the values as u wish and save ina third array .

For(int i=0 ;i< file.readline;i++)
{
   string s = a[customerid];
   s.concat(a[productid]);
a[k] =s;
}

Upvotes: 0

WillS
WillS

Reputation: 362

This is how you can do it using Java (don't forget to import):

public static Product[] readProductDataFile(File inputFile){
    Scanner s = new Scanner(inputFile);
    String data = "";
    while(s.hasNext())
        data += s.nextLine();
String[] dataArray = data.split("#");
}

Upvotes: 0

Zippy
Zippy

Reputation: 1824

You could use something like this (Be aware that i can't test it at the moment)


BufferedReader in = null;
try {
    in = new BufferedReader(new FileReader("fileeditor.txt"));
    String read = null;
    String firstLine=in.readLine();
   //reads the first line
    while ((read = in.readLine()) != null) {
   // reads all the other lines 
        read = in.readLine();
        String[] splited = read.split("#");
        //split the readed row with the "#" character
        for (String part : splited) {
            System.out.println(part);
        }
    }
} catch (IOException e) {
    System.out.println("There was a problem: " + e);
    e.printStackTrace();
} finally {
    try {
        //close file
        in.close();
    } catch (Exception e) {
    }
}

Upvotes: 0

TheCrafter
TheCrafter

Reputation: 1939

You don't even need the first line. Just read the second line directly into a single string and then split it by using String,split() method.

Read more for split method here.

Upvotes: 1

Related Questions