Обучающий пример по работе с файлами в классическом C++. В качестве среды для разработки использовал Visual Studio 2015.
Первый случай
У на есть файл input.txt с таким содержимым:
Aslapova Nastya 29 5 Nikolaev Dima 12 9 Tokmin Lev 96 75
То есть у нас тут хранится таблица с двумя столбцами, где хранятся строковые значения, и два столбца с целыми числами. Элементы разделены знаками табуляции. Количество строчек не известно.
Необходимо считать данные из файла и вывести на экран. При этом текстовые данные должны храниться в переменных типа string , а числа в переменных типа int .
Ниже приведен код программы, которая решает данную задачу. Обратите внимание на то, что тут используется подход по работе с потоками. Потоки может быть связаны не только с файлами или консолью, но также и со строчками:
При старте программы получим такую картину:
Добавление данных в excel таблицу с помощью python
Для простого случая такая программа подойдет.
Второй случай
Рассмотрим более сложный случай. Допустим есть еще один столбец с текстовой информацией, но с наличием пробелов:
Aslapova Nastya she did not come to class 29 5 Nikolaev Dima he bought a house 12 9 Tokmin Lev he does not know programming 96 75
Если мы напишем подобную программу, где только добавим новую string переменную info , то программа не будет работать, как нам нужно.
Вот, что получим:
Почему программа не работает:
iss >> surname >> name >> info >> age >> money;
Когда мы в потоке считывали наши данные, то программ не делает разницы между знаком табуляции и знаком пробела в качестве знака разделителя. Поэтому, когда считывается переменная info , то считывается значение до знака пробела, а не до знака табуляции. Отсюда и ошибки.
Как быть? Посмотрим эту строку:
iss >> surname >> name >> info >> age >> money;
Её бы заменить на цикл, в котором из нашего потока iss будем вытаскивать строчки используя в качестве разделителя то, что там нужно. Будем использовать подобную конструкцию:
string token; while (getline(iss, token, ‘t’)) std::cout <token <‘n’; >
Нам нужно будет только считанные значения в нужные переменные запихать. Еще не забыть перевести строчки в числа в нужных местах. Итого, полный код будет выглядеть так:
При запуске программы получим следующее:
Третий случай
А что будет, если информация из третьего столбца у нас будет написана русскими буквами? Например, дан такой текст:
Aslapova Nastya не пришла в класс 29 5 Nikolaev Dima купил дом 12 9 Tokmin Lev не знает программирование 96 75
Получится не то, что мы хотели:
Простейшие формы ввода данных в Excel за пару секунд – без применения VBA!
Тип string не умеет работать с Unicode кодировкой, в которой у нас сохранен текст файла. Как никак C++ появился и развился до внедрения Unicode.
Для этих нужд есть тип wstring . А для него многие вещи в программе придется поменять. Например, вместо cout теперь нужно использовать wcout , вместо istringstream будем использовать wistringstream , перед строчками, которые хотим вывести придется писать L и так далее.
Но и с wstring не всё гладко. Чтобы UTF-8 кодировка заработала, придется пошаманить. Именно по этой причине я не люблю работать с файлами и строками с помощью стандартных средств C++. Лучше использовать те типы переменных, которые есть в той среде, в которой пишется программа. Например, в Qt буду использовать QString и QFile .
Ладно, лирику в сторону. Вот код получившейся программы:
При запуске программы получим:
Четвертый случай
В последнем примере рассматривался случай, когда тест содержал русский текст и он был в кодировке UTF-8 . И да, при этом код нужно сильно переписывать. Однако можно себе упростить жизнь, если файл будет сохранен в кодировке cp1251 . Настоятельно не рекомендую её использовать (хотя Windows её до сих пор вставляет во все места, а в стандартном Блокноте Windows кодировка при сохранении называется ANSI ). Но с ней код будет выглядеть проще.
Плюс рассмотрим случай, когда нам в коде нужно будет сравнивать фамилию с тем значением, которые введет в консоли пользователь. При этом надо понимать, что кодировка вводимого пользователем текста должна совпадать с кодировкой в текстовом файле (либо производить преобразования кодировок).
Итак, у нас есть такой файл:
Аслапова Настя 29 5 Николаев Дима 12 9 Токмин Лев 96 75
Вот окончательный код программы:
Что тут добавилось?
Как я создал приложение для работы с электронными таблицами на Python, чтобы упростить науку о данных
Сегодня я работаю с открытым исходным кодом Grid studio , веб-приложением для работы с электронными таблицами с полной интеграцией языка программирования Python.
Около года назад я начал возиться с идеей создания IDE-технологии, которая мне всегда была нужна. Тщательно поработав с Microsoft Excel, R (Studio) и Python, я представлял, как некоторые их интегрированные версии облегчат мою жизнь.
Зачем?
Основная проблема, которую я решил решить с помощью Grid studio, — это разрозненный рабочий процесс, который я испытывал при переходе назад и вперед между несколькими инструментами, такими как R studio и Excel, при работе над проектами по науке о данных.
При экспорте этого CSV-файла за миллиардный раз, испытывая зависание окон приложений, когда число моих строк было слишком велико, или попытке сделать что-то прямое, такое как чтение в JSON-файле, я довольствовался этим. Существующие инструменты не предоставили мне среду и связанный с ней рабочий процесс, который позволил мне быть продуктивным.
Вот почему я решил создать что-то, что интегрировало бы мой рабочий процесс в единое, современное и простое в использовании приложение, подходящее для моих потребностей в науке о данных.
Как это работает?
Grid studio — это веб-приложение, которое очень похоже на обычную программу для работы с электронными таблицами, например, Google Sheets или Microsoft Excel. Однако его убийственной особенностью является глубокая интеграция языка Python.
Просмотр данных в табличной структуре и непосредственное управление ими очевидны практически для всех, кто пользовался компьютером.
Сочетание этого простого пользовательского интерфейса с мощью полноценного языка программирования, такого как Python, действительно выделяет его.
Сценарии на Python максимально просты: просто напишите несколько строк и выполните его напрямую.
Основная интеграция: чтение и запись на листах
В основе интеграции Python лежит интерфейс чтения и записи в вашей электронной таблице. Высокопроизводительное соединение между данными ваших листов и данными в вашем процессе Python.
Просто напишите на листе следующее:
sheet( «A1:A3» , [ 1 , 2 , 3 ])
И прочитайте с листа, как здесь:
my_matrix = sheet( «A1:A3» )
С помощью этой простой, но мощной функции вы можете читать и писать напрямую с листов и на них, чтобы автоматизировать ввод, извлечение, визуализацию и многое другое.
Написание пользовательских функций электронных таблиц
Хотя чтение и запись дают вам большую гибкость благодаря простому интерфейсу, иногда имеет смысл писать собственные функции, которые можно вызывать непосредственно в вашей электронной таблице.
Стандартные функции электронных таблиц, такие как AVERAGE, SUM, IF и т. д., уже доступны по умолчанию. Но что, если вам нужно больше?
Просто напишите нужную вам функцию!
def UPPERCASE (a) :
Теперь вызовите эту функцию в своей электронной таблице, как если бы вы работали с обычной функцией.
Использование экосистемы Python
Используя всю мощь экосистемы Python, вы получаете мгновенный доступ к современным инструментам обработки данных:
Это обеспечивает простой доступ к мощным моделям, таким как линейная регрессия и SVM для моделирования ваших данных.
Docker Runtime
Приложение работает в контейнере Docker, который дает вам легкий доступ к полностью упакованной и изолированной среде UNIX (даже в Windows!) Со всем готовым к работе: Python, scikit-learn, numpa, pandas, terminal, wget, zip и многие другие.
Это делает установку Grid studio такой же простой, как загрузка готового образа Docker и запуск одной команды.
Визуализация данных
Распространенной задачей в науке о данных является визуализация ваших данных. Учитывая ее важность, в Grid studio встроена поддержка расширенного построения графиков путем интеграции библиотеки Plotly.js и стандартного Python Matplotlib. Это предоставляет вам расширенные возможности построения в четком векторном формате.
Чтобы дать вам некоторые идеи о том, как использовать функции Grid studio, мы покажем, как они могут сочетаться с некоторыми конкретными примерами.
Пример: очистка сети
Этот пример демонстрирует всю мощь нахождения Python под рукой. То, что обычно требует некоторого перемещения между инструментами и файлами, теперь может быть интегрировано в один скрипт.
Выше вы видите, как короткий скрипт легко загружает новостные статьи из Hacker News прямо на лист.
Пример: оценка нормального распределения
В этом примере показан несколько глупый случай использования оценки нормального распределения с еще более высокой точностью, визуализированный с помощью Plotly.js. Здесь вы можете увидеть, как интерактивное построение графиков может дать вам представление о том, что происходит.
Как я могу использовать это?
Локальная установка Grid studio очень проста.
(Убедитесь, что у вас установлен Docker)
- Клонируйте репозиторий с помощью этой команды:
git clone https://github.com/ricklamers/gridstudio
- Запустите скрипт bash (в Windows используйте, например, Git Bash) с помощью этой команды:
cd gridstudio ./run.sh
- Перейдите на http://127.0.0.1:8080 в своем браузере.
Git Bash для Windows — установка Docker
Примечание: в Linux вам может потребоваться запустить следующее(для шага 2):
cd gridstudio sudo ./run.sh
так как для запуска Docker требуется доступ sudo.
Релиз + Будущее развитие
Как уже упоминалось во введении, сегодня Grid Studio будет доступна бесплатно и с открытым исходным кодом через репозиторий GitHub .
Если вы сделали это здесь, вы можете сами попробовать и прислать любые отзывы и / или вклады в проект на GitHub.
У меня есть некоторые идеи о том, какие функциональные возможности или функции могут быть добавлены в будущем для улучшения Grid Studio. Тем не менее, поскольку проект теперь имеет открытый исходный код, я думаю, было бы разумно отслеживать их на GitHub и видеть, какие из них имеют самый высокий приоритет в соответствии со всеми участниками.
— Расширение количества «нативных» функций, доступных в электронной таблице (например, AVERAGE, SUM, IF и т. Д.), Возможно, даже достижение четности (и согласованности) с некоторыми существующими пакетами, такими как Calc или Excel Libre Office.
— Подсветка синтаксиса/всплывающие подсказки функций при наборе формул в электронной таблице
— Расширенная сортировка и фильтрация в электронной таблице
— Расширенные элементы управления для интерактивного черчения с Plotly.js
— Общий доступ к рабочим областям/коду более прост (т.е. экспортируется рабочее пространство)
— Формы сотрудничества в реальном времени (это может быть слишком сложно)
— Какой-то API /интерфейс для дополнений /расширений
— Обновление парсера формул до реального парсера на основе грамматики.
— Надежность интеграции основного Python /листа (без разрыва символа / последовательности)
Источник: spbdev.biz
Таблица на языке C
Можно ли реализовать такую таблицу на языке С? Первая строчка задается автоматически, № тоже, а далее необходимо, чтобы пользователь вводил необходимую информацию. Я пробовал делать с табуляцией t но все тщетно. Вот собственно сам кусок кода:
#include #include #include #include struct library < char LastNAME[100]; char FirstNAME[100]; char MiddleNAME[100]; int BirthDate, BirthMonth, BirthYear; char Address[100]; int PhoneNumberMOBILE; int PhoneNumberWORK; >notebook[10]; void DataInitialization() //Инициализация данных < FILE* F; char fname[100]; int NumberOfEntries=0; printf(«Укажите имя файла, в котором будет хранится база данных (как на примере: text.txt)n->»); scanf_s(«%s», fname, sizeof(fname)); while (getchar() != ‘n’); if ((F = fopen(fname, «w+»)) == NULL) < printf(«Невозможно открыть для чтения файл n»); return; >; printf(«Сколько записей вы хотите сделать?n -> «); scanf_s(«%d», //ЗАМЕНИТЬ ПЕРЕМЕННУЮ printf(«№ | Фамилия | Имя | Отчество | Дата Рождения | Адрес | моб.телефон | раб.телефон |n»); /*while (1) /*>*/ > void ViewData() //Просмотр существующей базы данных < >void DataEdit() //Редактирование базы данных < >void AddData() //Дополнение базы данных новыми записями < >void DeleteData() //Удаление данных < >void SearchData() //Поиск в базе данных < >void SortData() //Сортировка данных по заданному полю < >int main() < setlocale(LC_ALL, «Russian»); int menu=1; while (menu != 0) < printf(«Выберите, что вам нужно сделатьn» «0 ->Выход из программыn» «1 -> Создание новой базы данныхn» «2 -> Просмотр существующей базы данныхn» «3 -> Редактирование базы данныхn» «4 -> Дополнение базы данных новыми записямиn» «5 -> Удаление записей из базы данныхn» «6 -> Поиск в базе данныхn» «7 -> Сортировка данных по заданному полюn»); scanf_s(«%d», if (menu > 7) printf(«Пж выберите цифру из предложенного списка:nn»); switch (menu) < case 1: DataInitialization();//Инициализация данных break; case 2: ViewData(); //Просмотр существующей базы данных break; case 3: DataEdit(); //Редактирование базы данных break; case 4: AddData(); //Дополнение базы данных новыми записями break; case 5: DeleteData(); //Удаление данных break; case 6: SearchData(); //Поиск в базе данных break; case 7: SortData(); //Сортировка данных по заданному полю break; >> >«`
Источник: ru.stackoverflow.com