Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/56: Рейтинг темы: голосов - 56, средняя оценка - 4.63
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549

Считать текстовые файлы из папки

23.02.2020, 13:04. Показов 11996. Ответов 75
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
только начинаю знакомиться с языком...
вывела в консоль все пути так
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
#include <iostream>
#include <fstream>
#include <dirent.h>
#include <cstdio>
#include <string>
 
using namespace std;
 
int main(int argc, const char *argv[])
{
    DIR *dir;
    struct dirent *entry;
    
    const char *p = "E:\\NEW docs\\";
    int* szp= new int(strlen(p));
    std::cout << *szp << std::endl;
 
    if ((dir = opendir (p)) != NULL) {
      /* print all the files and directories within directory */
      while ((entry = readdir (dir)) != NULL) {
        char* n;
        n=entry->d_name;
 
        int* szn= new int ((strlen(n))+*szp+1);
        //std::cout << *szn << std::endl;
            
        char* slovo = new char[*szn];
        strcpy( slovo, p);
        strcat(slovo, n);
        std::cout << slovo << std::endl;
 
        delete[] &slovo;
        delete &szn;
      }
      closedir (dir);
    } else {
      perror ("");
      printf("error");
      return EXIT_FAILURE;
    }
       delete &szp;
       delete[] &p;
 
    return 0 ;
}
как-то длинно получилось...
а ещё и содержимое файлов хочется вывести в консоль... можно ли как-то короче?.. взять в вектор и пробежавшись по нему вывести содержимое в консоль?..
(и ? есть ли возможность быстро и асинхронно их считывать - т.к. потом планируется их запуск на обработку)

Добавлено через 6 минут
и кириллица не норм - как выводить норм рус.яз ?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2020, 13:04
Ответы с готовыми решениями:

Определить строки этого файла, содержащие максимальную по длине подстроку, состоящую из одинаковых символов
вот задание для программы: 6. Задан текстовый файл input.txt. Требуется определить строки этого файла, содержащие максимальную по длине...

Как считать все текстовые файлы с папки
Как считать все текстовые файлы с папки

Вывести все текстовые файлы из папки в выпадающий список
Здравствуйте ув. web разработчики. Столкнулся с проблемой:wall:. Есть папка Data\ в ней файлы *.txt как вывести все файлы txt в список...

75
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
02.03.2020, 19:37
Студворк — интернет-сервис помощи студентам
JeyCi, а у вас есть опыт программирования на других языках? Просто лично у меня складывается представление, что вы как-то сумбурно, код пишите. Зачем к примеру смешивать Си'шные и плюсовые способы работы с файлом. Выберите что-то одно и используйте. Производительность у них, думаю, одинаковая будет. А вот когда всего "понамешано" - это очень плохо для восприятия. И не надо говорить что вы для себя пишите. Привыкайте сразу писать нормально.

(P.S. И да - у меня есть опыт работы с чужим "говнокодом". Поверьте - такого я не пожелаю никому...)
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
02.03.2020, 20:27  [ТС]
Цитата Сообщение от GbaLog- Посмотреть сообщение
while ((c = getc(f)) != EOF)
putchar(c);
действительно, посимвольно перекладывать долго...
что-то после FILE f*=fopen(fname, "rb") быстро в Буфер не могу загнать file возможно ли это после f.open ??.. есть лишь какой-то неудобный std::basic_filebuf...
наверно, пока остановлюсь на
//ЧТЕНИЕ ФАЙЛА в stream
ifstream in(fullPath, ios::binary);
//С++ В СТРОКУ
std::string linee;
getline(in, linee);
тем более json - в одну строку...
берётся 0,5сек...
всё-таки класс string удобнее, чем просто stream... который даже в буфер пока не знаю как загнать...

Добавлено через 11 минут
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Зачем к примеру смешивать Си'шные и плюсовые способы работы с файлом
потому что С - быстро работает и у него больше возможностей -- интересно его изучить, С++ проще писать, но зажимать себя в рамки его классов не хочется - пока ещё в С++ тоже опыта мало, чтобы выбрать более подходящие классы STD и STL ... главное - скорость сейчас, чтобы не переделывать потом, когда проект разрастётся... -- это уже проходили...
Цитата Сообщение от Recrut_rf Посмотреть сообщение
Производительность у них, думаю, одинаковая будет.
вот этим вы меня успокоили, спасибо... значит буду начинать с проверенных STD и STL... - знаю, что встроенные в С++ классы, как правило, уже содержат нужные конструкторы, деструкторы, обеспечивают потоко-безопасность, как правило, и др. плюса...
я из VBA и SQL ... Py и с-подобный (без указателей и ссылок иногда использовала)...
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
03.03.2020, 05:10
Цитата Сообщение от JeyCi Посмотреть сообщение
С - быстро работает и у него больше возможностей
как раз таки у С++ больше возможностей. На счёт того - кто быстрее - не знаю, наверное Си побыстрее плюсов будет.
Уж точно - всякие классы с полиморфизмом производительности не добавляют, но дают просто колоссальное преимущество при построении грамотной архитектуры проекта.

Цитата Сообщение от JeyCi Посмотреть сообщение
главное - скорость сейчас
Ага - скорость -
Цитата Сообщение от JeyCi Посмотреть сообщение
чтобы не переделывать потом, когда проект разрастётся..
если изначально не проработать архитектуру, а думать только о скорости - вы создадите себе кучу проблем или даже доведёте свой проект до состояния, когда проще будет написать заново новый, чем дорабатывать и поддерживать старый

Цитата Сообщение от JeyCi Посмотреть сообщение
С++ проще писать
Несогласен с вами, но спорить не буду, так как Си особо не изучал. Исхожу из того, что в плюсах изначально больше различных конструкций. Что в свою очередь не добавляет ему простоты.

Цитата Сообщение от JeyCi Посмотреть сообщение
проверенных STD и STL
Про STL знаю, а вот что такое STD - "современная наука умалчивает". Вы наверное путаете пространство STD (namespace STD) и библиотеку стандартных шаблонов STL, которая определена в этом пространстве.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.03.2020, 07:28  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
библиотеку стандартных шаблонов STL, которая определена в этом пространстве.
там же в STD определены и классы контейнеров с функциями-членами... поэтому станд. библ-ка, а библ-ку шаблонов STL рассматриваю отдельно... (всё-таки контейнеры - тоже описываются в классах - по сути библ.)... спорить не буду - библ или пространство имён...
Цитата Сообщение от Recrut_rf Посмотреть сообщение
в плюсах изначально больше различных конструкций.
в том то и дело - легко писать, когда есть классы... сложно писать, когда есть только биты. массивы и указатели, а классы писать часто приходится самостоятельно (причём не имея опыта по разработке библиотек)...
Цитата Сообщение от Recrut_rf Посмотреть сообщение
если изначально не проработать архитектуру, а думать только о скорости
согласна, поэтому уже на данном этапе думаю, как загонять в класс, а не тупо считывать... и какой класс - потом его(их) буду дорабатывать методами...
P.S.
просто в С - новое понимание надо - указатели, память - ранее с ними не работала... при этом знаю, что работа напрямую с памятью - м.б. быстрее, когда возможностей стандартной библы не хватает... но и способы защиты памяти надо продумывать (если сам с ней работаешь, а не C++ классы о защите памяти заботятся)...
просто по теме сам Потоковый IO - !! медленный (поэтому и открыла ветку - может есть ему альтернатива? но, честно говоря с учётом последнего моего поста считала ~420 файлов из папки за 0,5сек - это достойно -- просто с ост. ТЗ не так красочно -- если всё-таки буду кидать после обработки напрямую в БД - то ОК, а если выводить придётся в промежуточный .csv файл - то не нравятся мне эти потоки )...
P.P.S.
остальное на С/С++ быстро, и даже сопоставимо с VBA (примерно одинаково) -- просто у VBA объектная модель взаимодействия с самим Excel (ячейки, листы и т.д.) - медленная, у С++быстрее доступ к объектной модели Excel -- поэтому часто (когда в Excel нет соотв. библ-к и нормального ООП и работает медленно и жрёт много ресурсов тот же PQ и PP) - лучше писать надстройки на C/C++... имхо...
и вы правы, хоть проект и есть, реализованный средствами MS, но чтобы переводить его на рельсы C/C++ - надо глубже копнуть архитектуру, а не только бизнес-логику прежнюю использовать... всё-таки полноценный ООП - тоже придётся реализовывать по совести, а не по интуиции... для этого и пробую новые инструменты и языки

Добавлено через 7 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
спорить не буду - библ или пространство имён...
т.к. библ. (классы в ней) задаёт пространство имён - а по-другому, наверно, никак...
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.03.2020, 07:56
JeyCi, в современном C++ нет термина STL. С 1998 года в С++ то, что находится в пространстве std называется Стандартная Библиотека С++ (The C++ Standard Library).
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.03.2020, 10:09  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
в современном C++ нет термина STL
ок, буду знать... (информатику в школе изучала до 1998г) - пишу на остаточных знаниях
===
Цитата Сообщение от JeyCi Посмотреть сообщение
что-то после FILE f*=fopen(fname, "rb") быстро в Буфер не могу загнать file
нашла, что хотела - здесь
Функция fread
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
        FILE *ptrFile=fopen(slovo, "rb");// открываем бинарный файл для  чтения 
        //printf("%d\n",slovo);
          if (ptrFile == NULL)
          {
              fputs("Ошибка файла", stderr);
              exit(1);
          }
 
        //! Using ftell and fseek to find the size of a file is unsafe
          // определяем размер файла
          fseek(ptrFile , 0 , SEEK_END);                          // устанавливаем позицию в конец файла
          long lSize = ftell(ptrFile);                            // получаем размер в байтах
          rewind (ptrFile);                                       // устанавливаем указатель в конец файла
         
          char * buffer = (char*) malloc(sizeof(char) * lSize); // выделить память для хранения содержимого файла
          if (buffer == NULL)
          {
              fputs("Ошибка памяти", stderr);
              exit(2);
          }
 
          size_t result = fread(buffer, 1, lSize, ptrFile);       // считываем файл в буфер
          if (result != lSize)
          {
              fputs("Ошибка чтения", stderr);
              exit (3);
          }
         
          //содержимое файла теперь находится в буфере
          puts(buffer);
              
        fclose(ptrFile);
        free (buffer);

- отрабатывает ~420файлов за 0,3сек
//! Using ftell and fseek to find the size of a file is unsafe
не понятно только почему Unsafe ? - в чём может быть unsafetyness. если все защиты контейнеров, включая класс Потоков, реализованы - в классах (самих их методах) заложены алгоритмы буферизации и очистки буфера, насколько понимаю... ??
P/S/
чтение stream'а with chunks - (C Программирование: как читать содержимое всего файла в буфер) - //************/questions/108459/c-programming-how-to-read-the-whole-file-contents-into-a-buffer-- на https_//fooobar_com -- _ заменить на ":" и "." [линк порезан - но очень хороший]

Добавлено через 56 минут
Цитата Сообщение от JeyCi Посмотреть сообщение
почему Unsafe ?
1. есть такая разница в коде на foobar .../questions/17109504/why-unsafe-c-code-is-faster-than-good-code
2. возвращает неверное значение на foobar .../questions/108461/ftell-returning-incorrect-value
Кликните здесь для просмотра всего текста
if (((header_size = getc (fp)) == EOF) || (header_size == 0))
Обратите внимание, что эта проблема может не иметь ничего общего с бинарными файлами, это может быть вызвано тем, что даже 64-битные машины Windows имеют длинные 4 байта, тогда как в 64-разрядных системах Linux длина может быть либо 4 байта, либо 8 байтов.
Так как ftell возвращает long, под окнами максимальный файл, который вы можете прочитать, составляет 2 ГБ. В то время как под Linux это выше.
Трюк под окнами заключается в использовании _ftelli64() вместо ftell(), тогда у вас будет доступ на 64 бит.

3. и главное - например, используя fgets:
fgets собирается потерять информацию о размере строки из-за встроенных символов "\ 0".
на fooobar_com...../questions/108463/easiest-way-to-get-files-contents-in-c
альтернативы для использования:
на fooobar_com...../questions/254292/correct-way-to-read-a-text-file-into-a-buffer-in-c
часть кода
C++
1
2
3
4
5
6
7
        /* Read the entire file into memory. */
        size_t newLen = fread(source, sizeof(char), bufsize, fp);
        if ( ferror( fp ) != 0 ) {
            fputs("Error reading file", stderr);
        } else {
            source[newLen++] = '\0'; /* [COLOR="Red"]Just to be safe.[/COLOR] */
        }

вобщем, надо самостоятельно разруливать неурядицы с терминальным нулём "\0" на С... на С++ в <iostream>, наверно, этой проблемы нет... да и std::string как-то её обходит, вероятно...
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.03.2020, 13:27
Цитата Сообщение от JeyCi Посмотреть сообщение
не понятно только почему Unsafe ?
https://wiki.sei.cmu.edu/confl... gular+file
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.03.2020, 16:41  [ТС]
DrOffset, благодарю, ознакомилась
Setting the file position indicator to end-of-file with fseek() has undefined behavior for a binary stream. In addition, the return value of ftell() for streams opened in text mode is useful only in calls to fseek(), not for determining file sizes or for any other use. As such, fstat() or other platform-equivalent functions should be used to determine the size of a file.
-- значит код, который нашла - лучше для open(fName, "r")
p.s.
вообще по вашему линку много интересного!

Добавлено через 17 минут
p.p.s.
и очень веское замечание - Enforce type safety
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
char *source;
char a[NTBS_SIZE];
/* ... */
if (source) {
  errno_t err = strncpy_s(a, sizeof(a), source, 5);
  if (err != 0) {
    /* Handle error */
  }
}
else {
  /* Handle null string condition !!! */
}

p.p.p.s.
как и ещё одно веское замечание есть - 3 Major use of NULL Pointer in C Programming - полагаю, чтобы с этим source'ом под спойлером правильно обращаться...
• Make a habit of assigning the value to a pointer before using it. Don’t use pointer before initializing it.
• If you don’t have a valid memory address to store in a pointer variable, just initialize a pointer to NULL.
• Before using a pointer in any of your function code, check if it has not a NULL value.
Добавлено через 15 минут
p.p.p.p.s.
и очень хорошая сводка по Memory Management (MEM)
Кликните здесь для просмотра всего текста

MEM00-C. Allocate and free memory in the same module, at the same level of abstraction
MEM01-C. Store a new value in pointers immediately after free()
MEM02-C. Immediately cast the result of a memory allocation function call into a pointer to the allocated type
MEM03-C. Clear sensitive information stored in reusable resources
MEM04-C. Beware of zero-length allocations
MEM05-C. Avoid large stack allocations
MEM06-C. Ensure that sensitive data is not written out to disk
MEM07-C. Ensure that the arguments to calloc(), when multiplied, do not wrap
MEM10-C. Define and use a pointer validation function
MEM11-C. Do not assume infinite heap space
MEM12-C. Consider using a goto chain when leaving a function on error when using and releasing resources


Добавлено через 1 час 43 минуты
до кучи - а то никогда не думала об этом - INT07-C. Use only explicitly signed or unsigned char type for numeric values
Кликните здесь для просмотра всего текста
C++
1
2
3
unsigned char c = 200;
int i = 1000;
printf("i/c = %d\n", i/c);
0
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
03.03.2020, 16:57
Цитата Сообщение от JeyCi Посмотреть сообщение
до кучи - а то никогда не думала об этом - INT07-C. Use only explicitly signed or unsigned char type for numeric values
Ну да, signet char может принимать значения от -128 до 127, так как 1 разряд байта отводится под знак, значащих бит остается всего 7, при попытке записать в него положительное больше 127 вызывает переполнение и вместо 200 (как в примере) получается -56
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.03.2020, 17:34  [ТС]
я как-то вообще char к цифрам не думала...
Цитата Сообщение от Annemesski Посмотреть сообщение
127 вызывает переполнение и вместо 200 (как в примере) получается -56
хорошо, unsigned 0-255 - значит влезет... всё-таки типы - всегда надо помнить (и себе, и app'у)... а посчитать переполнение было бы интересно - это ведь биты считать надо? или почему 56?
===
и с конверсией пока не очень - например, int в char ?
C++
1
2
3
4
char p;
int i=38;
p=i;
cout<<(int)p<<endl;
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
03.03.2020, 19:07
Цитата Сообщение от JeyCi Посмотреть сообщение
int в char
при преобразовании вернёт числовой код символа
Цитата Сообщение от JeyCi Посмотреть сообщение
почему 56
потому что пойдёт по "второму кругу" образно говоря, это если я не ошибаюсь.

Вы бы подтянули основы что ли, а потом брались бы за что нибудь серьёзное. Не в обиду - но скачайте какую - нибудь книгу по С++ страниц под 1000. В ней всё, что вы спрашиваете можно будет найти.

Или вам дали задание, которое обязательно нужно сделать в кратчайшее время?
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.03.2020, 19:54  [ТС]
я не по книге изучаю язык, а по задаче и потребностям... написала ведь вначале темы - это мой первый код... какие вопросы возникают - те и сканирую (и в книге, и в сети, и на форуме)... просто основы очень новы (память, указатели, приведение типов) - нет полных книжек, такие линки, как DrOffset оставил, в книжках не найти ...
да и норм. Окна переменных нет в ide, чтобы видеть, что в векторе или в переменной или ином контейнере, да и ошибки ide не показывает не работает... - не оч. удобно... вот и приходится предполагать и проверять...
не хотите не отвечайте Recrut_rf, - а открывать книгу, или на ветке отметить тот или иной нюанс (может, даже чтобы в перспективе вернуться к нему) - на память - сама решу - спасибо всем за комменты для наведения резкости моего взгляда на нов. яз. и нов. терминологию...
Цитата Сообщение от Recrut_rf Посмотреть сообщение
скачайте какую - нибудь книгу по С++ страниц под 1000.
и вам того же...
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.03.2020, 20:03
Цитата Сообщение от JeyCi Посмотреть сообщение
нет полных книжек, такие линки, как DrOffset оставил, в книжках не найти ...
Книжки есть отличные. Именно в духе разных советов по ситуациям. Ознакомиться с ними однозначно должен любой практикующий С++-ник.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
03.03.2020, 20:11  [ТС]
просто примеры учебные и примеры под конкретную задачу - под объём данных, их вид, лучший алгоритм их обработки, перспективы развития проекта в конце концов и др - это как правило разные вещи бывают... вот и изучаю по задаче
0
 Аватар для Annemesski
2686 / 1344 / 484
Регистрация: 08.11.2016
Сообщений: 3,732
03.03.2020, 23:25
Цитата Сообщение от JeyCi Посмотреть сообщение
а посчитать переполнение было бы интересно - это ведь биты считать надо? или почему 56?
Тут довольно хитро, прикол в том что в двоичной системе вычитание можно представить как сложение с побитовой инверсией вычитаемого, плюс учет переноса в знаковый разряд, причем переполнение в знаковом разряде (если оттуда возник перенос) прибавляется к младшему разряду результата, при переполнении этот перенос возникает всегда, отсюда получаем что вот у нас есть байт и мы пишем в него число 200: 11001000 и если число беззнаковое, то это и есть 200, как есть, но если у нас байт знаковый, значит старший (именно старший) разряд будет знаковым и единица в нем означает что число отрицательное, то есть в знаковый байт мы запишем: 1.1001000, тут, казалось бы, в значащих разряда лежит число 72 (1001000), но знаковый разряд говорит что число отрицательное, то есть 128 - 72 = 56 или в особенностях двоичной арифметики (далее восклицательный знак означает побитовую инверсию) 1.!(1001000) + 0.0000001 = 1.0110111 + 0.0000001 = 1.0111000 = -56, к стати за счет этого и получается что диапазон от -128 до 127, а не от -127 до 127 как, казалось бы, должно быть и это правильно иначе бы пришлось иметь дело с положительным и отрицательным нулем. Как-то так.

Добавлено через 9 минут
Заморочка в общем, но с инженерной точки зрения это крайне удобно: изобретаем всего одно арифметическое устройство - сумматор и... надо просуммировать? Сумматор! Умножение - несколько итераций сложения, то есть опять сумматор, вычитание? Нет проблем - инвертируем вычитаемое и снова сумматор!! А так деление - это вычитание делителя, значит инверсия делителя и опять сумматор - вот такая красота.
1
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
04.03.2020, 04:40  [ТС]
Цитата Сообщение от Annemesski Посмотреть сообщение
в значащих разряда лежит число 72 (1001000), но знаковый разряд говорит что число отрицательное, то есть 128 - 72 = 56
Annemesski, вот спасибо - вот это ликбез!...
Цитата Сообщение от Annemesski Посмотреть сообщение
в особенностях двоичной арифметики
я и ваш ответ буду долго пытаться понять... - но новые слова запомню (хоть будет, что гуглить)
Цитата Сообщение от Annemesski Посмотреть сообщение
Заморочка в общем, но с инженерной точки зрения это крайне удобно: изобретаем всего одно арифметическое устройство - сумматор и...
... и возможность работать с байтами - вообще отличительная особенность С - не всегда же люди с буквами по тексту разбираются в коде (как мне здесь надо разобрать текст из файлов), хоть я пока и не собираюсь драйвера писать на С... но даже текст, представленный байт массивом - обрабатывается быстрее! стринговой переменной...
главное, с обработкой этих байтов и битов не напортачить... посему в такие дебри теории - тоже полезно залазить, но не во всех книжках они есть...
господа, спасибо, без ваших ответов - я бы плавала в своих знаках вопросов ещё долго... а так по вашим ответам вырисовывается план кривой самообучения... благодарю
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
04.03.2020, 12:16
JeyCi, наверное тоже будет полезно: дополнительный код. Это то, что вам описали одним постом выше.
1
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
04.03.2020, 19:05
Цитата Сообщение от JeyCi Посмотреть сообщение
не хотите не отвечайте
Да я всегда рад помочь (ладно, не всегда - иногда бываю занят ). Мои познания, правда, не слишком большие. Но книжку скачать, как минимум одну - Справочник по STL Джосаттиса - очень рекомендую. Конечно же, если у вас феноменальная память, то, я вам завидую и эта книга вам не понадобится. Но лично мне трудно в голове постоянно держать информацию про всякие манипуляторы, фацеты, кортежи, пары и т. д.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,549
05.03.2020, 13:46  [ТС]
Цитата Сообщение от Recrut_rf Посмотреть сообщение
если изначально не проработать архитектуру, а думать только о скорости - вы создадите себе кучу проблем
Recrut_rf, я приняла на заметку и ваш пост!.. спасибо.
Наследование vs Композиция vs Агрегация - правда это вроде С#... но тем не менее касательно дизайна...
спасибо, что дали повод покопать и эту тему!...
Урок №148. Агрегация - хороший коммент:
Ну тут относительно всё, большинство можно описать и агрегацией, и композицией. В зависимости от задачи…
так вот в моём случае, видимо Композиция лучше - чтобы удаляя контейнер Report удалять и все его record'ы, импортированные из текстовика... (после того, как скину их куда надо в распарсенном виде)...
ну, или тут хороший пример (ещё подумаю) - Работа с типизированным файлом -- правдв дату в С++ лучше загонять в структуру, насколько знаю...
===
но это (ООП, Классы, дизайн, Архитектура) уже, наверно, стоит отложить для др. ветки... как и правильные Указатели на объекты Класса, поля класса и методы класса... в этой ветке хоть первый раз посмотрели на указатели, благодаря hoggy на первой странице...
P.S.
отмечу, только, что в IDE Ultimate++ нашла и окно Locals, и Watches - и всё привычно глазу для разработки, как в VBA ... - это всё появляется при пошаговом прохождении кода из Debug->Run...
0
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,474
05.03.2020, 14:17
Цитата Сообщение от JeyCi Посмотреть сообщение
правда это вроде С#
Всё, что касается ООП - будет работать и в C# и в С++ и в Java - да вообще везде, где ООП есть.

касательно наследования, композиции и агрегации - здесь нужно смотреть на то, что вам нужно. Образно говоря, наследование создаёт самую "сильную" связь между классами.
Остальные два варианта подразумевают под собой по сути создание поля внутри класса (или целого класса, к полям которого можно обращаться, но извне он виден не будет).

Ну так вот - если вам нужно, чтобы какие-то созданные вами классы (образно говоря) были одного общего типа (то есть есть класс родитель - от него наследуются его потомки - все они "образно" могут считаться однотипными по родству (блин - хреновый из меня объясняльщик) тогда ваш выбор - наследование.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2020, 14:17

Не открываются папки, в которых лежат текстовые файлы (*.txt)
Доброго времени суток. Стоит Windows 10. Иногда после включения не открываются папки, в которых лежат текстовые файлы (*.txt) - Проводник...

Объединить текстовые файлы из папки и подпапки в один файл
Нужно считать папку и подпапки, парсить все текстовые файлы, которые в них находятся, и создать новый файл, который склеит все те файлы с...

Как объединить в один все текстовые файлы заданной папки?
Как объединить в один все текстовые файлы заданной папки. Кодировка у всех файлов - CP-1251, такая же кодировка необходима и выходному...

Текстовые файлы, как считать следующую строку посимвольно, оставаясь на нынешней
Вообщем такая проблема: вот кусок программы, где я читаю файл while not Eof(F) do Begin readln(F,l); k:=''; for i:=1 to...

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru