2012-07-22 3 views
2

Текстовый файл выглядит следующим образом:Java: Как читать 4 числа из каждой строки в файле. И поместить их в переменные?

данных, данные, данные, данные
данных, данные, данные, данные

данные являются числами. 4 числа, разделенные запятыми и около 2000 строк. Однако мне нужно использовать только 20 строк за раз. Стартовая линия должна быть выбрана по ее числу, а затем она получает 19 дополнительных строк.

Эти данные должны быть помещены в переменные (float), которые называются однозначно, поэтому я могу выполнить математику на них. Так это можно назвать так:

DataOne1 DataOne2 DataOne3 DataOne4
DataTwo1 DataTwo2 DataTwo3 DataTwo4

Таким образом, я могу затем сделать математику как DataTwo1 - DataOne3. Разумеется, эти переменные всегда будут одинаковыми, но тогда я смогу изменить базовые данные, выбрав новые строки.

Мне очень жаль, что это такой вопрос для новичков, но я полностью не мог собрать вещи из разных решений, чтобы получить точное решение.

Так что мой вопрос: как мне это сделать?

+0

Ваши данные разделены запятой? –

+0

Мои данные разделена запятыми. Нет пробелов. Если это создает мир различий, я могу изменить его, чтобы его разделяли пространство и никакие запятые. Существует множество сценариев, которые могут заменять запятые пробелами :) – user1463899

+0

Нет нет ... это все хорошо ... мой ответ –

ответ

5

1. Вы можете прочитать всю строку, используя метод ScannernextLine().

2. Затем используйте split() метод (я предполагаю, что данные разделены («») запятыми), чтобы получить все 4 данные по линии.

например:

String[] s = strLine.split(","); 

3. Рассмотрим сделав ArrayList из Float, а затем преобразовать каждый элемент в массиве String[] в Float элемент в ArrayList, используяFloat.parseFloat()

ArrayList<Float> fArr = new ArrayList<Float>(); 
for (String temp : s){ 
    fArr.add(Float.parseFloat(temp)); 
} 

4. Затем сделайте все, что вам нужно.

+0

Спасибо за ответ! Мне понадобится время, чтобы увидеть, работает ли это, но если это не так, это, вероятно, моя ошибка :) Итак, я пойму это, спасибо за удобные указания. – user1463899

+1

+1: за предоставление указаний и не предоставление полного кода ... –

+0

@ user1463899 Он будет работать, я сделал это сам несколько раз назад .... –

0

Эти шаги, которые необходимо сделать для того, чтобы получить то, что вы хотите:

1. Откройте файл, используя BufferedReader:

BufferedReader br = new BufferedReader(new FileReader(filename)); 

2. Получить на стартовой линии:

for (int i = 0; i < startLine; i++) { 
    line = br.readLine(); 
} 

3. процесс в 20 строк, нужно, хранить номера в ArrayList<Double>

for (int i = startLine; i < startLine + 20; i++) { 
    line = br.readLine(); 

    // Split the lines using comma as delimiter 
    String[] numberStrings = line.split(","); 
    ArrayList<Double> numbers= new ArrayList<Double>(); 

    for(String numberString : numberStrings) { 
     Double number = Double.valueOf(numberString); 
     numbers.add(number); 
    } 
    // Do calculations with them 
} 
0

Вот код. Для каждой строки я сохранил значения в массиве. Таким образом, ваш DataOne1 будет в cols0 [0], DataTwo1 будет в cols0 [1], DataTwo1 будет в cols1 [0], а DataTwo2 будет в cols1 [1] и так далее. Вы можете очень хорошо использовать двухмерный массив для этой цели, но чтобы это было просто, я выбрал этот подход.

try { 
     BufferedReader br = new BufferedReader(new FileReader("fileName")); 
     String line; 
     float[] col0 = new float[20]; 
     float[] col1 = new float[20]; 
     float[] col2 = new float[20]; 
     float[] col3 = new float[20]; 
     for (int i = 0; i < 20; i++) { 
      while((line = br.readLine()) != null) { 
       // Since you told comma as separator. 
       String[] cols = line.split(","); 
       col0[i] = Float.valueOf(cols[0]); 
       col1[i] = Float.valueOf(cols[1]); 
       col2[i] = Float.valueOf(cols[2]); 
       col3[i] = Float.valueOf(cols[3]); 
      } 
      // Do something - your math. 
     } 
     br.close(); 
    } 
    catch (FileNotFoundException e1) { 
     e1.printStackTrace(); 
    } 
    catch (IOException e) { 
     e.printStackTrace(); 
    } 
Смежные вопросы