Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 6

Считывание и сортировка таблицы Excel из .txt файла

12.03.2018, 11:11. Показов 2361. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать программу, которая будет считывать таблицу из Excel таблицы, сохранённой в txt формате. После сортировки программа должна сохранить данные в новый txt файл. Вот примерное содержание исходного файла:
Бобриков 1 2 3 3 4
Петров 3 4 4 4 4 4 4
Жалкин 4 5 5 5 5 5
Кораблёв 2 3 2 3 3 3
Козлов 4 4 4 4
Зубкова 5 5 4 4 4
Красников 3 3 3 3 3 5 4
Астахов 5 3 5 4 4
Мельников 3 3 3 3 3 3 3
Новиков 5 4 4 4 4
Краснова 5 5 5 4 4 5
Прудов 5 3 4 5 4 3
Прыткин 2 2 2 3 3 3
Трынькина 4 5 4 5 4
Васницов 4 5 4 3 4 5
Символы разделены табуляцией. После считывания нужно посчитать среднее значение оценки по каждой строке для отдельного человека, кол-во оценок и дисперсию. Есть код на C, но так и не разобрался с считыванием с файла в Java
Вот код работающей программы на C. Мне бы разобраться только с считыванием с файла, остальное смогу допилить.
C
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
#include <math.h>
 
 
using namespace std;
const int j = 7;
 
struct ocenki
{
    string famil;
    int a[j] = { 0,0,0,0,0,0,0 };
    float mo = 0;
    int k = 0;
    float dis = 0;
};
 
int main()
{
    int m = 0;
    char c='0';
    int g;
    setlocale(LC_ALL, "ru");
    cout << "введите количество учеников" << endl;
    cin >> g;
    if (g < 1 || g>101)
    {
        cout << "ERROR!! Неправильное число учеников" << endl;
        system("pause");
        return 0;
    }
    ocenki p[100];
    //считывание с файла
    ifstream file("text.txt");
    if (!file.is_open())
        cout << "Файл не был открыт" << endl;
    else
    {
        for (int i = 0; (i < g)&&!file.eof(); i++)
        {
            file >> p[i].famil;
            int n = -1;
            while(n<j&& !file.eof())
            {
                c = file.get();
                if (c != '\n')
                    if (c != '\t')
                    {
                        p[i].a[n] = c-48;
                    }
                    else
                        n++;
                else
                    break;
            }
            if (!file.eof())
                m++;
        }
    }
    file.close();
    cout << "Вывод файла" << endl;
    //количество оценок и математическое ожидание
    for (int i = 0; i < m; i++)
    {
        for (int n = 0; n < j; n++)
            if (p[i].a[n] != 0)
            {
                p[i].mo += p[i].a[n];
                p[i].k++;
            }
        p[i].mo /= p[i].k;
    }
    //Дисперсия:
    for (int i = 0; i < m; i++)
    {
        for (int n = 0; n < j; n++)
        {
            if (p[i].a[n] != 0)
                p[i].dis +=pow((p[i].a[n] - p[i].mo),2);
        }
        p[i].dis /= p[i].k;
    }
    //сортировка
    for (int l = 0; l < m; l++)
        for (int i = 0; i < m; i++)
            if (p[l].mo > p[i].mo)
                swap(p[i], p[l]);
            else
                if (p[l].mo == p[i].mo)
                    if (p[l].dis < p[i].dis)
                        swap(p[i], p[l]);
                    else
                        if (p[l].dis == p[i].dis)
                            if (p[l].k > p[i].k)
                                swap(p[i], p[l]);
    //Запись в файл
    ofstream f("text2.txt");
    f << m;
    for (int i = 0; i < j+1; i++)
        f << "\t";
    f<< "Матем. ожид.\t" << "Диспер\t" << "Кол-во оцен.\n";
    for (int i = 0; i < m; i++)
    {
        f << p[i].famil << "\t";
        for (int n = 0; n < j; n++)
        {
            f << p[i].a[n] << "\t";
        }
        f<<p[i].mo << "\t"<<p[i].dis<< "\t"<<p[i].k<< "\n";
    }
    f.close();
    //проверочный вывд на экран
    cout << "Доступное кол-во: " << m << endl;
    for (int i = 0; i < m; i++)
    {
        cout << p[i].famil << " ";
        for(int n=0;n<j;n++)
            cout << p[i].a[n] << " ";
        cout << " ; Mat mod: " << p[i].mo;
        cout << " ; Disper: " << p[i].dis;
        cout << " ; Kol oc: " << p[i].k;
        cout << endl;
    }
    system("pause");
    return 0;
}
[/SIZE][/SIZE]
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.03.2018, 11:11
Ответы с готовыми решениями:

Чтение txt-файла и заполнение таблицы Excel
Добрый день, есть текстовый файл. Из него вынимаем данные, и записываем в excel таблицу. Вопрос как создать таблицу excel программно и так...

Считывание иформации с .txt в Excel
Профессионалы и фанаты своего дела.. у меня к вам просьба. Есть калькулятор (написанный кем-то в доисторические времена) суть этого...

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

10
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.03.2018, 12:18
excel тут каким боком?
Цитата Сообщение от XOBOTAN Посмотреть сообщение
Мне бы разобраться только с считыванием с файла
Java
1
2
3
4
5
try (Stream<String> lines = Files.lines(Paths.get(PATH))) {
            lines.map(line -> line.split("\t")).map(Arrays::toString).forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
Добавлено через 2 минуты
а еще лучше возьми csv-парсер. Вот этот например https://commons.apache.org/proper/commons-csv/
0
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 6
12.03.2018, 12:39  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
excel тут каким боком?

Java
1
2
3
4
5
try (Stream<String> lines = Files.lines(Paths.get(PATH))) {
            lines.map(line -> line.split("\t")).map(Arrays::toString).forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
Добавлено через 2 минуты
а еще лучше возьми csv-парсер. Вот этот например https://commons.apache.org/proper/commons-csv/
Таблица с фамилиями и оценками создаётся в Excel, потом сохраняется в txt. И уже с этим txt файлом нужно работать.
Цитата Сообщение от XOBOTAN Посмотреть сообщение
После считывания нужно посчитать среднее значение оценки по каждой строке для отдельного человека, кол-во оценок и дисперсию
Результат вывести в новый файл
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.03.2018, 12:54
Цитата Сообщение от XOBOTAN Посмотреть сообщение
Результат вывести в новый файл
действуй
0
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 6
12.03.2018, 13:49  [ТС]
Я бы с радостью, но не понимаю как считать данные с каждой строки отдельно и записать их в массивы
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.03.2018, 13:53
вон же код сверху
0
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 6
12.03.2018, 14:24  [ТС]
Цитата Сообщение от xoraxax Посмотреть сообщение
вон же код сверху
Я понял, что код выводит элементы из файла, но т.к. в начале строки написаны фамилии при запуске куча ошибок
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Exception in thread "main" java.io.UncheckedIOException: java.nio.charset.MalformedInputException: Input length = 1
    at java.io.BufferedReader$1.hasNext(BufferedReader.java:574)
    at java.util.Iterator.forEachRemaining(Iterator.java:115)
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
    at com.company.Main.main(Main.java:13)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
    at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.InputStreamReader.read(InputStreamReader.java:184)
    at java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.io.BufferedReader.readLine(BufferedReader.java:324)
    at java.io.BufferedReader.readLine(BufferedReader.java:389)
    at java.io.BufferedReader$1.hasNext(BufferedReader.java:571)
    ... 9 more
Но как работать с этими данными я так и не понял. Т.е. как посчитать среднее значение для каждой строки например.
Вот пример текстового файла, с которым нужно работать.
Вложения
Тип файла: txt text.txt (332 байт, 3 просмотров)
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.03.2018, 14:32
в utf-8 сохрани
0
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 6
12.03.2018, 14:45  [ТС]
Окей, в utf-8 выводит вместе с фамилиями, но как дальше с элементами работать?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
12.03.2018, 15:06
Цитата Сообщение от XOBOTAN Посмотреть сообщение
Мне бы разобраться только с считыванием с файла, остальное смогу допилить.
Цитата Сообщение от XOBOTAN Посмотреть сообщение
но как дальше с элементами работать?
чото я не пойму
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
12.03.2018, 18:33
XOBOTAN, вот, по простому...
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
package ru.ismoke;
 
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
 
public class Cyber {
 
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(new File("text.txt"));
        FileWriter writer = new FileWriter(new File("out.txt"), false);
        ArrayList<String[]> list = new ArrayList<>();
        while (scan.hasNext()) {
            String[] s = scan.nextLine().split("\t");
            list.add(s);
        }
 
        for (String[] temp : list) {
            double sum = 0;
            for (int j = 1; j < temp.length; j++) {
                if (temp[j].equals("")) temp[j] = "0";
                sum += Integer.parseInt(temp[j]);
            }
            String result = temp[0] + ": \t" + (sum / (temp.length - 1) + "\n");
            System.out.print(result);
            writer.write(result);
        }
        writer.close();
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2018, 18:33
Помогаю со студенческими работами здесь

Ввод данных с txt файла, сортировка и запись результата в txt файлы
Доброго времени суток, такое задание, не могу сделать ввод данных из .тхт файла, чтобы потом отсортировать данные из этого же файла и...

Считывание txt файла
Проблема в том что не считать переменные из файла. Фаил выглядит примерно так: 123213,3123|313123,3123|31121,232 ...

Считывание с txt файла
Моя проблема заключается в том что, мне нужно сделать, чтобы при нажатии на button на первой форме, открывалось окно для выбора txt файла,...

Считывание .txt файла
Здравствуйте! Возникла следующая проблема. Я вычисляю размер файла в байтах и делаю считывание текста из файла с помощью команды .read()....

Считывание из файла .txt
У вас есть файл input.txt содержащий строки вида key:value key1:value1 Необходимо открыть файл и вывести содержимое в...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru