Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
cadavera
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 2
1

Считывание нескольких файлов

16.01.2014, 20:59. Просмотров 659. Ответов 3
Метки нет (Все метки)

Здравствуйте, вот столкнулась со следующей проблемой. У меня есть набор файлов с именами 60.s, 70.s .... и до 960.s Каждый из этих файлов представляет собой два столбца с набором чисел. Например:
9.0000 52.4091
10.0000 54.9394
11.0000 57.3182
12.0000 58.1818
13.0000 57.0909
121.0000 49.6212
122.0000 47.1212
123.0000 44.4848
Программа, которая штампует эти числа, автоматически выравнивает их в столбы, но при этом получается, что в каждой строке содержится разное количество пробелов. Мне нужно взять в каждом из этих файлов второй столбец и составить из них таблицу. Для этого у меня есть следующий код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.io.*;
import java.util.Scanner;
import java.text.*;
 
public class ReaderDM {
    
    private int Number;
    private String name;
    private double[][] massive = new double[1000][100]; // условно говорим, что у нас есть 1000 строк в каждом файле
    private String text;
    int i=0,j=0;
    
    File fileInput(int k){ // доступ к файлам
        
        name = k + ".s";
        
        File fileInp = new File(name); //Исходный файл
        return fileInp;
    }
    
    void Massive(){
        try{
            for (int k=60; k<=960; k+=10){
                
        Scanner scan = new Scanner(fileInput(k));
        //scan.nextLine();
        
        while (scan.hasNextLine()){//Считываем файл, записываем в массив
                text = scan.nextLine();
                System.out.println("Вы ввели текст\n"+text); 
 
                massive[i][j]=scan.nextDouble(); // выскакивает исключение InputMismatchException
                
                j++;
                      
            }   
             scan.close();
             i++;
            } 
    }catch (IOException error) {
            System.out.println("Не открывается!");
        }
    }
    
    
    public static void main(String[] args) {
 
        ReaderDM obj = new ReaderDM();
             
            obj.Massive();
 
    }
}
Здесь написан вариант со scan.nextDouble() не работающий. Пыталась сделать через
Java
1
2
text = scan.nextLine();
                String[] str =text.split(" ");
Но тут каждый раз не знаешь как с пробелами определиться. Есть ли варианты решения для такого?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.01.2014, 20:59
Ответы с готовыми решениями:

Копирование нескольких файлов
Здравствуйте Появилась такая проблема. Не могу скопировать несколько...

Открытие нескольких файлов для считывания данных
У меня есть несколько файлов , как лучше открыть их все для считывания чтобы...

Компиляция из нескольких файлов класса
Господа, прошу вашей помощи. пытаюсь скомпилировать класс в котором...

Напишите программу конкатенирующую (соединяющую воедино) последовательно несколько файлов. Имена файлов задаются в командной строке
Напишите программу конкатенирующую (соединяющую воедино) последовательно...

Считывание содержимого из нескольких файлов
Доброго времени суток. Поискала в более ранних темах - не нашла. Суть...

3
darknim
182 / 158 / 48
Регистрация: 30.07.2013
Сообщений: 506
16.01.2014, 22:15 2
За пример взял твои цифры и засунул в файл, предварительно проставив по разному количеству пробелов между столбцами в строчках.

Java
1
2
3
4
5
6
7
8
9
10
11
12
        try {
            BufferedReader input = new BufferedReader(new FileReader("d:\\file.txt"));
            String string;
            while ((string = input.readLine()) != null) {
                String[] arr = string.trim().split("[ ]+");
                System.out.println(arr[0] + " " + arr[1]);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
        }
Реализация простая. Считываю построчно. Регулярным выражением делю строку на два числа.
Кто нибудь может попроще сейчас предложит.
1
Bringoff
СуперМодулятор
133 / 132 / 48
Регистрация: 03.11.2012
Сообщений: 974
17.01.2014, 11:00 3
Проверил, вроде работает. Результирующие цифры выводятся в консоль, так как я не знаю, что вы с ними делаете)
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Main {
 
    final static int BEGIN_NAME = 60;
    final static int END_NAME = 980;
 
    static ArrayList<Numbers> numbers = new ArrayList<Numbers>();
 
    public static void main(String[] args) {
        for (int i = BEGIN_NAME; i < END_NAME; i+=10) {
            try {
                Scanner sc = new Scanner(new File(i + ".s"));
                while (sc.hasNextLine()) {
                    String temp = sc.nextLine();
                    String[] temp2 = temp.trim().split("[ ]+");
                    double first = Double.parseDouble(temp2[0]);
                    double second = Double.parseDouble(temp2[1]);
 
 
                    numbers.add(new Numbers(first, second));
                }
 
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
 
        }
 
        for (Numbers n : numbers) {
            System.out.println(n.getList().get(0).getFirstDouble() + " " + n.getList().get(0).getSecondDouble());
            System.out.println("--------------------------------------");
 
        }
 
    }
 
    static class Numbers {
 
    public Numbers(double first, double second) {
        list.add(new TwoDoubles(first, second));
    }
        public ArrayList<TwoDoubles> getList() {
            return list;
        }
 
        private ArrayList<TwoDoubles> list = new ArrayList<TwoDoubles>();
    }
 
    static class TwoDoubles {
 
 
        private double firstDouble, secondDouble;
 
        public TwoDoubles(double firstDouble, double secondDouble) {
            this.firstDouble = firstDouble;
            this.secondDouble = secondDouble;
        }
 
        public double getSecondDouble() {
            return secondDouble;
        }
 
        public double getFirstDouble() {
 
            return firstDouble;
        }
 
 
    }
}
1
cadavera
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 2
17.01.2014, 14:55  [ТС] 4
Спасибо большое! Запахало.
Да, регулярные выражение ещё никому не помешали
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 14:55

Считывание 2 файлов на выбор из папок и замена кода внутри файлов
имеется различные папки с файлами, например в папке c названием &quot;A 1&quot; - 3...

Проверка на существование нескольких файлов в нескольких папках
есть 5 папок(1,2,3,4,5), в них находятся 5 файлов( в каждой папке по файлу с...

Считывание нескольких чисел
Суть стоящей передо мной задачи такова - мне нужно ввести несколько чисел через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru