powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение из текстового файла строковых данных в двумерный массив
25 сообщений из 78, страница 3 из 4
Чтение из текстового файла строковых данных в двумерный массив
    #39597714
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось какой нибудь супер супер правильный код, который бы ел все подряд и не задавал глупых вопросов.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597715
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel,

У вас есть проблема - нужно разобрать файл. Вы решили использовать регулярные выражения. Теперь у вас две проблемы.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597716
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Это какие?
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597718
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel,

Код: java
1.
Files.lines(path).map(MyParser::parseLine).collect(toList());
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597720
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, вот именно это и вызывает ошибки.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597726
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Вот этот файл таким способом не читался у меня
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597762
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
import java.io.File;
import java.util.Arrays;
import java.util.Scanner;

try (Scanner scan = new Scanner(new File("D:\\system_statfile.txt"))) {
    while (scan.hasNextLine()) {
        String[] s = scan.nextLine().split("\\s+");
        System.out.println(Arrays.toString(s));
    }
}
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597783
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,
И при попадании в имени файла пробела, все покатится под гору. В начале этой темы уже обсуждалось, что split - не вариант.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597786
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngel,

в имени файла могут быть цифры? (вообще, в пути)
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39597803
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
try (Scanner scan = new Scanner(new File("D:\\system_statfile.txt"))) {
    while (scan.hasNextLine()) {
        String line = scan.nextLine();
        if (line.contains("lost+found")) continue;
        String[] names = line.split("(\\s\\d+)+");
        String attrs = line.split(String.join("|", names), -1)[1];
        System.out.printf("%s - %s%n", attrs, Arrays.toString(names));
    }
}
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39599468
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UsmanBlackeAngel,

в имени файла могут быть цифры? (вообще, в пути)
Естественно
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39599754
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelUsmanBlackeAngel,

в имени файла могут быть цифры? (вообще, в пути)
Естественно должно сработать
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628202
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, продолжим тему...
Собствено на 2 странице есть код, я его немного подправил и получилось что то такое
Код: 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.
public static String[][] parsetxtfile(String filename, String patern) {
        String[][] mass = new String[0][];
        try {
            BufferedReader reader = null;
            ArrayList<String> result = new ArrayList<String>();
            Pattern pattern = Pattern.compile(patern);
            try {
                reader = new BufferedReader(new FileReader(filename));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            String line;
            while ((line = reader.readLine()) != null) {
                result.add(line);
            }
            mass = new String[result.toArray().length][7];
            for (int i = 0; i < result.toArray().length; i++) {
                Matcher matcher = pattern.matcher(result.get(i).toString());
                if (matcher.find()) {
                    for (int j = 1; j <= matcher.groupCount(); ++j) {
                        mass[i][j - 1] = matcher.group(j);
                    }
                }
            }
        } catch (IOException e2) {
            e2.printStackTrace();
        }
        return mass;
    }


Вроде всё здорово, кроме одного НО:
Код: java
1.
 mass = new String[result.toArray().length][7];


если в функцию попадает большее кол-во matcher.group чем 7, то всё падает.
Как сделать динамически изменяемым? чтоб в зависимлсти от кол-ва matcher.group увеличивалось?
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628453
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может arraylist<arraylist<string>> надо использовать? Или что? В какую сторону вообще смотреть?
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628501
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelСобствено на 2 странице есть код, я его немного подправил и получилось что то такое

А почему нельзя сразу нормальный код писать а не говнокодить?

Код: 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.
public static String[][] parsetxtfile(String filename, String patern) {
        String[][] mass = new String[0][]; //Сразу создаём не нужный объект, даже если ошибки не возникнет.
        try {
            BufferedReader reader = null; // Зачем-то инициализируем важную переменную важным значением null
            ArrayList<String> result = new ArrayList<String>(); //Почему-то нам важено чтобы это был ArrayList и чтобы код работ в Java 5
            Pattern pattern = Pattern.compile(patern);
            try {
                reader = new BufferedReader(new FileReader(filename));  //try with resource? Фигня бесолезная.
            } catch (FileNotFoundException e) {
                e.printStackTrace();  //Очень важно перехватить ошибку прямо здесь. Ведь даже, если мы не можем прочитать файл, важно чтобы дальше кот отработал.
            }
            String line;  
            while ((line = reader.readLine()) != null) { //Java 8 NIO2? Не. Мы же на Java 5 пишем.
                result.add(line);
            }
            mass = new String[result.toArray().length][7];
            for (int i = 0; i < result.toArray().length; i++) { //for each loop? Это тоже что-то слишком модное?
                Matcher matcher = pattern.matcher(result.get(i).toString()); //String.toString() очень важно всегда вызывать.
                if (matcher.find()) {
                    for (int j = 1; j <= matcher.groupCount(); ++j) {
                        mass[i][j - 1] = matcher.group(j); //Обожаю вот эти все минус единица, плюс единица. 
                    }
                }
            }
        } catch (IOException e2) {
            e2.printStackTrace();
        }
        return mass;
    }


BlackeAngelесли в функцию попадает большее кол-во matcher.group чем 7, то всё падает.
Как сделать динамически изменяемым? чтоб в зависимлсти от кол-ва matcher.group увеличивалось?
Можно просто создать массив когда группы известны.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628523
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Это всё здорово, но читать надо построчно, разбивать на столбцы регуляркой. Итоговый массив получается ёлочкой. И какие же инструменты использовать для себя задачи? Map сразу выкинем - он падает на некоторых файлах. А ридбуфер самое надёжное, что я знаю.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628529
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczМожно просто создать массив когда группы известны.
В разбеге от 3 до хрен его знает, как такое учесть?
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628535
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelBlazkowicz,
Это всё здорово, но читать надо построчно, разбивать на столбцы регуляркой. Итоговый массив получается ёлочкой. И какие же инструменты использовать для себя задачи? Map сразу выкинем - он падает на некоторых файлах. А ридбуфер самое надёжное, что я знаю.
Извините, но не понимать массивы в Java, это, блин, за гранью.

Код: java
1.
2.
3.
4.
5.
6.
7.
mass = new String[result.size()][];
for (...) {
    Matcher matcher = ...
    if (matcher.find()) {
         mass[i] = new String[matcher.groupCount()];
    }
}



Вам по делу пишешь, а вы какую-то херню отвечаете.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628543
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
И что, так будет массив одномерный перемоздавпться каждый раз? Мне вообще надо на выходе получить двумерный.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628546
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelИ что, так будет массив одномерный перемоздавпться каждый раз? Мне вообще надо на выходе получить двумерный.
В Java нет двумерных массивов. Только массивы массивов. Двумерный массив это вырожденый случай массива массивов.
Вы же сами про ёлочку писали. Определитесь уже, если все элементы разной длины, то зачем под них выделять массивы максимальной длины?

И что значит это ваше "Мне вообще надо". Это какое-то техническое требование? Вооще просто перебрать потом массив в цикле не вариант? Обязательно весь квадрат обойти?
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628561
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczВы же сами про ёлочку писали. Определитесь уже, если все элементы разной длины, то зачем под них выделять массивы максимальной длины?

Затем что данные должны располагаться друг под другом в определенном максимальной длинной столбце. Пускай всё остальное будет null, но это проще обрабатывать, чем каждую строчку с переменной размерностью.

Да, массивы java знаю хреновенько, но классическое их поведение сносно.

Пример исходных данных(ёлочка)
1 2 3 4
1 2 3 4 5 6 7
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
Двумерный массив на выходе какой надо получить.
1 2 3 4 0 0 0
1 2 3 4 5 6 7
1 2 3 4 0 0 0
1 2 3 4 5 0 0
1 2 3 4 5 6 0
0 = null
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628581
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я шизею. Требования высасываются из пальца находу. Сначала и список списков подходит. Но потом массив массивов не подходит.
А вся проблема в том что в кучу намешано куча говна, которая должна быть разделена по полочкам.
- Работа с файловой системой отдельно
- Парсинг файлов отдельно (привет партизану)
- Формирование результата в формат требуемый для последующей обработки - отдельная задача.

Логично что нельзя сформировать матрицу, не зная её ширины. Соответсвтенно, нужно сначала узнать ширину, а затем формировать матрицу. И тут только два варианта.
Экономно по памяти, расход по CPU
- Перебрать вычислить ширину. Сформировать матрицу. Перебрать ещё раз.
Либо экономно по CPU, но перерасход по памяти
- Сохранить в промежуточный результат, хоть в один список с разделителями. Потом трансформировать его в матрицу.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628599
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczЯ шизею.
Не стоит, дорогой :-)

В общем магии никакой в java нет, как погляжу. Даже динамического двумерного массива с переформированием без потери данных... А на дворе 21 век...

Нет, из пальца ничего не высасывается, всё было изначально так. Просто часть озвучивалась, часть нет. Только поэтому использовались регулярки.

Ну что ж будем грузить проц, воспользовавшись первым советом, ибо циклы уже все построены, добавить пару условий и готово.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628604
BlackeAngel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, в кучу у меня не намешано ничего. Всё по порядку работа с фс и парсинг идут друг за другом. Хотя вы говорите что java8 на дворе, а использую java5.
Да, парсю 2 раза, но такова ситуация.
...
Рейтинг: 0 / 0
Чтение из текстового файла строковых данных в двумерный массив
    #39628606
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackeAngelВ общем магии никакой в java нет, как погляжу. Даже динамического двумерного массива с переформированием без потери данных... А на дворе 21 век...
Магии в прикладном ПО вообще мало. Всё работает на технологиях разработанных в 80-х. Просто эти технологии стали использоваться повсеместно в связи с ростом вычислительных мощностей. Вся магия в железе.
...
Рейтинг: 0 / 0
25 сообщений из 78, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Чтение из текстового файла строковых данных в двумерный массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]