0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 28

Форматирование текстового файла (перевод с Си)

10.12.2017, 16:18. Показов 3833. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят, есть код на СИ, нужно его перевести на Java. Может кто-нибудь разбирается и сможет перевести небольшой кусочек кода? Буду очень признателен.

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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
*
int SplitToLines (char *text, int buf, char *filename)
{ * FILE *f = fopen (filename, "w");
* * if (!f)
* * { * perror(" ");
* * * * return 0;
* * }
*
* * int len = 0;
* * char *temp = (char*) malloc (buf+1);
* * char *word = strtok (text," ");
* * 
* * while (word != NULL)
* * { * strcpy(temp, word);
* * * * len += strlen(temp)+1;
* * * * * * * * 
* * * * if (len < buf )
* * * * * * fprintf (f, "%s ", word);
* * * * else
* * * * { * fprintf (f, "\n%s ", word);
* * * * * * len = strlen(temp)+1;
* * * * }
* * * * word = strtok (NULL, " ");
* * }
*
* * fclose(f);
* * free (temp);
* * return 1;
}
*
int PrintLines (int buf, char *filename)
{ * FILE *f = fopen (filename, "r");
* * if (!f)
* * { * perror(" ");
* * * * return 0;
* * }
* * char *line = (char*) malloc (buf+1);
*
* * while (fgets(line, buf, f))
* * * * fprintf(stdout, "%s", line);
*
* * fclose(f);
* * free (line);
* * return 1;
}
*
int main()
{ * int buf = 50;
* * char *filename = "lines.txt";
* * 
* * char text[] = "Split string into tokens. A sequence of calls to this function split str into tokens, \
which are sequences of contiguous characters separated by any of the characters that are part of delimiters. \
On a first call, the function expects a C string as argument for str, whose first character is used as \
the starting location to scan for tokens. In subsequent calls, the function expects a null pointer and \
uses the position right after the end of last token as the new starting location for scanning.";
*
* * printf("\nOriginal text:\n\n");
* * puts(text);
*
* * SplitToLines (text, buf, filename);
* * printf("\nText in lines:\n\n");
* * PrintLines (buf, filename);
*
* * getchar ();
* * return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.12.2017, 16:18
Ответы с готовыми решениями:

Форматирование текстового файла
Доброго времени суток! Укажите, пожалуйста, на путь истинный. Задача. Есть файл.лог в котором следующая запись 01.04.2012 - 12:00:00...

Форматирование текстового файла
Всем доброго времени суток.Помогите с кодом.У меня задание на форматирование текстовых файлов учитывая левую и правую границы. Есть...

Перевод текстового файла в UTF-8
Добрый день. Мне дали задание составить программу, конвертирующую текстовый файл (кириллица по идее) в UTF-8. Полагается, что...

27
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.12.2017, 02:10
Студворк — интернет-сервис помощи студентам
Ну я не буду писать сетевое приложение, но напишу тебе формочку и пару кнопок с JTextArea, а отправку сделаю в файл.
Ок?

Добавлено через 35 секунд
Но сделаю не регуляркой... Они иногда косячат и работают дольше цикла
0
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 28
13.12.2017, 02:15  [ТС]
Все, я разобрался. Сделал вот так:
Java
1
2
3
4
PrintStream ps = new PrintStream(socket.getOutputStream());
                    ps.println("message");
                    ps.println(temp.replace('\n', '_'));                        
                    ps.flush();
А в клиенте так получаю:
Java
1
2
3
4
5
6
7
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
                String temp = in.readLine();
                
                if(temp.equals("message") == true)
                {
                    this.jTextArea.setText(in.readLine().replace("_", "\n"));
                }
Спасибо за помощь.

Но появилась еще одна небольшая проблема. Когда делаю второй абзац, появляется непонятный отступ в конце строки почему-то. На скрине видно.
Миниатюры
Форматирование текстового файла (перевод с Си)   Форматирование текстового файла (перевод с Си)  
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.12.2017, 02:58
напиши лучше метод для форматирования... Он не сложный, чем регулярка. И при том менять \n на _ не выход
там по другому делается, ща накатаю

Добавлено через 36 минут
Вот метод форматирования:

использование:
Java
1
text = formatText(text, 50, 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
public static String formatText(String text, int countSymbolsInLine, int tab) {
        StringBuilder sb = new StringBuilder();
        if (text != null) {
            text = text.trim();
            for (String line : text.split("\n")) {
                if (line.length() != 0) {
                    line = String.format(String.format("%s%d%s", "%", tab, "s"), "") + line;
                    int symbols = 0;
                    for (String word : line.split("\\s")) {
                        symbols += word.length() + 1;
                        if (symbols <= countSymbolsInLine) {
                            sb.append(word).append(" ");
                        } else {
                            sb.append("\n").append(word);
                            symbols = word.length();
                        }
                    }
                } else {
                    sb.append("");
                }
                sb.append(System.lineSeparator());
            }
        }
        return sb.toString();
    }
Добавлено через 1 минуту
Посылка текста:
Java
1
2
3
4
5
6
7
8
9
10
11
try (PrintStream ps = new PrintStream(socket.getOutputStream())) {
            ps.println("Message");
            if (text != null) {
                for (String line : text.split("\n")) {
                    ps.println(line);
                }
            }
            ps.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
Добавлено через 1 минуту
приём:
Java
1
2
3
4
5
6
7
8
9
10
StringBuilder sb = new StringBuilder();
try (BufferedReader in = new BufferedReader(socket.getInputStream())) {
       String line;
       while ((line = in.readLine()) != null) {
           sb.append(line).append("\n");
       }
} catch (IOException e) {
       e.printStackTrace();
}
JTextArea.setText(sb.toString);
0
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 28
13.12.2017, 03:22  [ТС]
Спасибо. В вашем коде так же разобрался. Но проблема, как на скринах осталась прежней
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
13.12.2017, 04:06
Я не понял проблему... Скажи попонятнее, пжл
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
13.12.2017, 12:35
"\\s*(.{0,79}(\\p{L}\\b|\\p{Punct})) "
0
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 28
13.12.2017, 14:02  [ТС]
Цитата Сообщение от ArtemFM Посмотреть сообщение
Я не понял проблему... Скажи попонятнее, пжл
Вот, подчеркнул место на скрине, где строка дальше не заполняется, а переносится почему-то.
Миниатюры
Форматирование текстового файла (перевод с Си)  
0
502 / 348 / 134
Регистрация: 14.06.2016
Сообщений: 669
13.12.2017, 14:11
Вот этот попробуй
\\s*(.{0,79}(\\p{L}\\b|\\p{Punct}))

Добавлено через 1 минуту
Вообще, вы почему то в начальном [^\n] заменили на [^\\d].
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2017, 14:11
Помогаю со студенческими работами здесь

Перевод текстового файла в XML формат
Здравствуйте, мне необходимо написать программу, которая получая на входе текстовый файл будет выдавать соответствующий ему файл xml. ...

Перевод содержимого текстового файла в верхний регистр
Собственно вопрос в шапке. Как перевести всё содержимое текстового файла в верхний регистр? Кодировка UTF-8 без BOM (хотя это особо и не...

Перевод текстового файла в формат html, с индикацией
Напишите пожалуйста программу, которая переводила бы текстовый файл в файл формата html. Предусмотреть индикацию хода процесса

Перевод числа из двоичной системы счисления в восьмеричную из текстового файла
Написать функцию перевода числа из двоичной системы счисления в восьмеричную. Исходный текстовый файл содержит числа в двоичной...

Добавить в конец первого текстового файла содержимое второго текстового файла
Даны два текстовых файла. Добавить в конец первого файла содержимое второго файла.


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

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

Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru