Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.02.2016
Сообщений: 28

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

10.12.2017, 16:18. Показов 3705. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru