Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788

Перевод с C++ на C#. Вывод текста в колонках

27.02.2016, 16:32. Показов 2227. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста. Код написал на плюсах, не знаком с шарпом, учу, но пока не достаточно знаний.
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <iterator>
#include <locale.h>
#include <cstdlib>
 
using namespace std;
 
const char fnamein[]="f.doc";
int main()
{
    setlocale(LC_ALL,"Rus");
    
    size_t count=0; //Число символов в файле
    char S; //для подсчета символов
    freopen("f1.txt","w",stdout);
    /*Просто считаем число символов*/
    ifstream f(fnamein);
    while (!f.eof()) 
    {
        f.get(S);
        count++;
    }
    f.close();  
    
    /*Добавляем текст в переменную*/
    
    char *S2=new char [count]; //Выделяем память по определенному числу символов
    for (int i=0;i<count;i++) S2[i]=NULL; //Очищаем строку от хлама
        ifstream f2(fnamein);  //создаем поток для работы с файлом
         int i=0; //курсор на текущий символ (как номер буквы в слове)
 
         while (!f2.eof()) //Проходим по файлу
         {
             f2.get(S2[i]); //Записываем символ за символом 
             i++; //передвинули курсор для записи следующего символа
         }
         
        f2.close(); //закончили работу с файлом
   //     cout<<S2<<endl; //Теперь переменная char[] содержит текст из файла
    stringstream ss(S2);
    vector <string> vstr;
    int a=1;
    string temp;
    // слова из строки S2 - в вектор слов
   int sch=0;
   i=0;
    while (ss >> temp)
        vstr.push_back(temp);
     // вывод слов из вектора
   // copy(vstr.begin(), vstr.end(), std::ostream_iterator<string>(cout, "\n"));
   cout<<"Страница 1:\n";
    for (int q = 1; q<= vstr.size()/100; q++)
        {
            if (i>=50) cout<<"\n\n\n\n\n\n\n\n\n\nСтраница: "<<a<<endl; 
            while (sch<50) {
            cout<<vstr[i]<<"            "<<vstr[i+50]<<endl; sch++; 
            i++;
        } sch=0; a++;
            i=i+50;
        }
    delete []S2; //освобождаем память
    /**************************************/
    return 0;
}
Условие задачи - прочитать текст из файла, разделить на две колонны по 50 строк и каждый раз на новую страницу отправлять каждые 50 строк. Кстати, если можно подравняйте, пожалуйста, слова.. Ибо получается примерно так:
pervoe slovo
dva 4toto


Пробовал переводчики, в них нет такого понятия как fstream и т.д., да и многовато разного...

Добавлено через 55 минут
Кто может помочь?

Добавлено через 21 час 40 минут
Апаю
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.02.2016, 16:32
Ответы с готовыми решениями:

размещение текста в двух колонках.
разделила весь текст в две колонки. проблема - текст разбит постранично, а не целиком. то есть сначала идет разбитая первая страница, потом...

Перевод программы из Паскаля в Дельфи. Считывание произвольного текста из файла и вывод в алфавитном порядке
Такие дела : Принес преподу программу, которая считывает произвольный текст из файла и распечатывает в алфавитном порядке все латинские...

Смена цвета текста в колонках list view
Добрый день, уважаемые форумчане. Встала задачка сменить цвет в 2 из 3 столбцах в listview. Имеется вот такой вот код: string row = {...

18
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
27.02.2016, 19:54
Цитата Сообщение от Aymurat Посмотреть сообщение
разделить на две колонны по 50 строк и каждый раз на новую страницу отправлять каждые 50 строк
поясните?
1
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 06:53  [ТС]
Rius,
Дан текст, гарантировано что число слов в тексте делится на 100. Нужно вывести 1 слово в 1 колонну, 51 слово во вторую. И так 50 раз, чтобы 50 строк было, и в следующую страницу идем. Вот такие дела) На C++ уже реализовал...
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 07:47
Число слов или число символов? Если символов, то это даже не важно. А если слов, то одна строка может оказаться длиной в 400 символов, а другая в 100...
0
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 07:49  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Число слов или число символов? Если символов, то это даже не важно. А если слов, то одна строка может оказаться длиной в 400 символов, а другая в 100...
В одном слове не более 10 символов. Число слов в общем тексте делится на 100.
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 07:53
Ага.
Нужно не
Code
1
2
3
4
5
6
7
8
9
10
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
12345678901234567890123456789012345678901234567890 12345678901234567890123456789012345678901234567890
а вот такое:
Code
1
2
3
4
1234567890  1234567890
1234590       1234567
12347890     1234567890
123             12345
1
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 07:55  [ТС]
Rius,
Слова разделены именно пробелом, нужно просто записать в одну переменную, или вектор, а затем по индексу как я циклом выводить в нужном порядке.
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 08:22
Лучший ответ Сообщение было отмечено Aymurat как решение

Решение

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
    class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 1)
                return;
 
            string path = args[0];
            List<string> words = new List<string>();
            char[] separators = new char[] { ' ', '-', ',' };
 
            using (StreamReader reader = new StreamReader(path))
            {
                string str;
 
                while (!reader.EndOfStream)
                {
                    str = reader.ReadLine();
                    words.AddRange(str.Split(separators, StringSplitOptions.RemoveEmptyEntries));
                }
            }
 
            Func<List<string>, int, string> getWord = (list, index) =>
            {
                return (index < list.Count) ? list[index] : String.Empty;
            };
 
            for (int shift = 0; shift < words.Count; shift += 100)
            {
                for (int index = 0; index < 50; index++)
                {
                    //string str = String.Format("{0,-10} {2} {1,-10} {3}",
                    //    getWord(words, shift + index),
                    //    getWord(words, shift + index + 50),
                    //    shift + index,
                    //    shift + index + 50);
                    string str = String.Format("{0,-50}{1,-50}",
                        getWord(words, shift + index),
                        getWord(words, shift + index + 50));
                    Console.WriteLine(str);
                }
            }
        }
    }
1
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 08:32  [ТС]
Rius, а как указать файл для чтения? in.txt и out.txt
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 08:34
В параметрах к exe
Типа
Bash
1
program.exe d:\temp\changes.txt
В студии есть: в свойствах проекта, отладка, аргументы командной строки.
1
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 08:44  [ТС]
Rius, а куда out идет?
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 08:45
Туда же, куда и C++ версии. cout
0
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 08:46  [ТС]
Rius, вот прочитал допустим f.txt, мне нужно чтобы результат в f1.txt шло)
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 08:47
Так код на плюсах Ваш или кого-то другого?
0
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 08:48  [ТС]
мой
о вижу, просто надо было поставить в конце паузу...
Результат выводится в консоли, а можно в файл записать как-нибудь?
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 08:51
Лучший ответ Сообщение было отмечено Aymurat как решение

Решение

C#
1
2
3
4
5
            if (args.Length < 2)
                return;
 
            string path = args[0];
            string path2 = args[1];
...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            using (StreamWriter writer = new StreamWriter(path2))
            {
                for (int shift = 0; shift < words.Count; shift += 100)
                {
                    for (int index = 0; index < 50; index++)
                    {
                        string str = String.Format("{0,-50}{1,-50}",
                            getWord(words, shift + index),
                            getWord(words, shift + index + 50));
                        writer.WriteLine(str);
                    }
                }
            }
1
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 08:55  [ТС]
Rius,
В плюсах все намного проще, файл указывается прямо в коде, есть куча вариантов, от file *in до freopen.
А здесь - темный мир.

Кстати я до сих пор не понял как записать в f1.txt...
0
Эксперт .NET
 Аватар для Rius
13136 / 7696 / 1677
Регистрация: 25.05.2015
Сообщений: 23,479
Записей в блоге: 14
28.02.2016, 08:59
Тут тоже можно в коде. Только указывать в коде (хардкодить) - плохой тон.
Куча вариантов есть в чтении файловых потоков. Кучи настроек для каждого из них.

Добавлено через 2 минуты
Если Вам этот язык ещё понадобится, почитайте Литература по C# для начинающих и не только
Есть вещи, которые на нём делать гораздо более проще и удобно, чем на C++.
1
125 / 117 / 67
Регистрация: 07.11.2014
Сообщений: 788
28.02.2016, 09:00  [ТС]
Rius, Вы лучший.. Теперь я продвинулся и в шарпе
Проблема решена, спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.02.2016, 09:00
Помогаю со студенческими работами здесь

Вывод данных в колонках
Вывести в 10 колонок с заголовками сначала номера отрицательных элементов массива, затем положительных. После таблицы вывести минимальный и...

Грид, в котором помимо текста в одних колонках были бы рисунки в других
Мне надо на форме разместить грид, в котором помимо текста в одних колонках были рисунки в других. Я посмотрел - есть тут DrawGrid -...

Вывод элементов массивов в колонках используя StreamWriter
Добрый день! Посоветуйте пожалуйста как сделать правильно алгоритм вывода в txt (в блокнот) StreamWriter(ом) . Опишу ситуацию, есть некое...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru