Из презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
Из презентации вы узнаете:
— как работает database/sql;
— интерфейс и реализации database/sql/driver;
— обзор популярных ORM и что с ними не так;
— как мы делали свой лучший ORM;
— и почему столько раз его переделывали.
In the research for our new Field Guide to Software for Nonprofits, we at Idealware gave a lot of thought to how various types of software can come together to help with fundraising. In this free hour long seminar, we'll walk through the types of software that exist -- from the basics to the more advanced -- and talk about how they can support fundraising, some popular vendors, and where to go for more information.
To get the recorded audio to go along with it, you can call into (712) 432-1011, access code 494354975 (regular long distance charges will apply). The recording starts on page 6 -- the Fundraising Software Pyramid.
We'll cover, at a high level:
Donor Management Systems
Constitutent Relationship Management Systems
Integrated Online Systems
Online Donation Tools
Broadcast Email Tools
Friend-to-Friend Fundraising
Social Networking
House Parties and Meet-ups
Mobile Texting
Mobile Giving
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
2. Общие шаги
1. Включение заголовочного файла fstream в
программу.
2. Объявление файлового потока.
3. Связывание файлового потока с источником
ввода/вывода.
4. Открытие файла
5. Использование файлового потока с операциями
>>, <<, или другими функциями ввода/вывода.
6. Закрытие файла.
3. Файловый ввод/вывод в С++
Поток – последовательность символов
интерактивный (iostream)
cin – входной поток связанный с клавиатурой.
cout – выходной поток связанный с дисплеем.
cerr – выходной поток, в который направляются
сообщения об ошибках, связан обычно с дисплеем.
clog - то же, что cerr, но буферизирован.
в файл (fstream)
ifstream – определят новый входной поток (обычно
связанный с файлом).
ofstream – определяет новый выходной поток (обычно
связанный с файлом).
4. Заголовочные файлы
iostream – содержит основную информацию
необходимую для всех операций ввода/вывода
iomanip – содержит информацию полезную для
форматирования потока ввода/вывода через
манипуляторы
fstream – содержит информацию для файлового
ввода/вывода
strstream – содержит информацию для выполнения
операций ввода/вывод через память (т.е. через строки
в памяти)
5. ios базовый класс.
istream и ostream наследуется от ios
ifstream наследуется от istream (и ios)
ofstream наследуется от ostream (и ios)
iostream наследуется от istream и ostream (& ios)
fstream наследуется ifstream, iostream, и ofstream
Классы для потоков в C++
6. C++ потоки
//Добавляем заголовок
#include <fstream>
int main ()
{ /* Объявляем файловые потоки */
ifstream fsIn; // входной
ofstream fsOut; // выходной
fstream both //входной & выходной
//Открываем файлы
inData.open("prog.dat"); //открываем входной файл
outData.open("prog.out"); //открываем выходной файл
// Код работы с потоками
.
// Закрываем файлы
inData.close();
outData.close();
return 0;
}
7. Функция оpen()
оpen() это метод каждого класса ( fstream, ifstream,
ofstream)
void fstream :: open ( const char *filename, openmode
mode);
void ifstream ::
open ( const char *filename, openmode mode= ios::
in);
void ofstream ::
open ( const char *filename, openmode mode=
ios:: out | iso :: trunc);
9. Валидация файла перед обращением к
нему
//Проверить поток
if ( ! mystream)
{
cout << “Cannot
open file.n ”;
}
//Используя метод
//is_open()
if ( !
mystream.is_open()) {
cout << “File is
not open.n ”;
}
Первый подход Второй подход
10. Пример: открытие файла
#include <fstream>
using namespace std;
int main()
{
/* объявление и автоматическое
открытие файла*/
ofstream outFile(“fout.txt");
// валидация
if(! outFile) {
Cout << “Cannot open file.n ”;
return 1;
}
return 0;
}
#include <fstream>
using namespace std;
int main()
{
// декларируем выходной поток
ofstream outFile;
// открываем существующий файл
// fout.txt
outFile.open(“fout.txt”);
// валидация
if(! outFile.is_open() ) {
Cout << “Cannot open file.n ”;
return 1;
}
return 0;
}
С применением конструктора Используя метод open()
11. Пример: запись
#include <fstream>
using namespace std;
int main()
{ /* объявление и автоматическое
открытие файла */
ofstream outFile(“fout.txt");
//вывод как и в cout,
// пишем в файла
outFile << "Hello World!";
outFile.close();
return 0;
}
#include <fstream>
using namespace std;
int main()
{ // декларируем выходной поток
ofstream outFile;
// открываем существущий файл fout.txt
outFile.open(“fout.txt”);
//вывод как и в cout,
// пишем в файла
outFile << "Hello World!";
outFile.close();
return 0;
}
С применением конструктора Используя метод open()
12. Пример: чтение
#include <iostream>
#include <fstream>
int main()
{ // Открываем текстовый файл
ifstream openFile(“data.txt");
char ch;
// выполняем пока не конец файла
while( ! оpenFile.eof() )
{
оpenFile.get(ch); // получаем символ
cout << ch; // выводим в сout
}
оpenFile.close(); // закрываем файл
return 0;
}
#include <iostream>
#include <fstream>
#include <string> // для getline()
int main()
{ //октркываем файл
ifstream openFile(“data.txt");
string line;
while(!openFile.eof())
{//считать строку
getline(openFile, line);
cout << line;
}
openFile.close(); // close the file
return 0; }
Посимвольно Целой строки
13. Больше о функциях чтения
ifstream fsin;
fsIn.open(const char[] fname)
Связывает поток fsIn с внешним файлом fname.
fsIn.get(char& character)
Получает следующий символ из потока fsIn и
помещает в character.
fsIn.getline(char *buf, int n, char c = 'n')
Извлекает строку из потока.
fsIn.eof()
Проверяет конец файла.
fsIn >> c; // как cin
14. Больше о функциях записи
ofstream fsOut;
fsOut.open(const char[] fname)
Связывает поток fsOut с внешним файлом
fname.
fsOut.put(char character)
Помещает символ character в выходной поток
fsOut.
fsOut.eof()
tests for the end-of-file condition.
fsOut << c; //как cout
15. Флаги
Name Description
ios::in Открытие файла на чтение
ios::out Открытие файла на запись
ios::app Открытие на добавление. Вызывается ios::out
ios::ate Открытие на добавление. Не вызывается
ios::out
ios::trunc Удалить содержимое файла. (усечь до нулевой
длины)
ios::nocreate Если файл не существует, открытие с
помощью функции open() невозможно
ios::noreplace Если файл существует, попытка открытия
через функцию open() function, приведет к
ошибке
ios::binary Открыть в бинарном режиме
16. Файловые флаги
#include <fstream>
int main(void)
{
ofstream outFile("file1.txt", ios::out);
outFile << "That's new!n";
outFile.close();
Return 0;
}
Если необходимо установить больше фалгов просто
используйте оператор |. Таким образом:
ios::ate | ios::binary
17. Бинарный режим
Функции для бинарного режима
get(): Извлекает один символ из потока
istream& istream::get(unsigned char&);
put(): Помещает один символ в поток
ostream& ostream::put(char);
read(): Производит чтение блока символов
istream& istream::read(unsigned char *buf, int len);
write(): Производит запись блока символов
ostream& osteram::write(const unsigned char *buf, int n);
18. Работа с бинарными файлами
Некоторые полезные функции
seekg(): переход к определенной позиции для чтения
seekp():переход к определенной позиции для записи
tellg(): Возвращает текущую позицию чтения из потока
tellp(): Как и tellg() но для записи
flush(): Сбрасывает буфер в файл
19. Детальнее о перемещенияи
указателя
inFile.seekg(0) – перемещение указателя в начало файла
inFile.seekg(n, ios:beg) – перемещение позиции указателя на
n байт от начала файла
inFile.seekg(m, ios:end) – перемещение указателя на
m байт от конца файла
nFile.seekg(0, ios:end) – перемещение указателя в конец файла
Аналогичные операции в <ostream> и для функции seekp.
20. Пример
//Пример 1: Использование get() и put()
#include <iostream>
#include <fstream>
void main()
{
fstream File("test_file",ios::out | ios::in | ios::binary);
char ch;
ch='o';
File.put(ch); //помещение значения ch в поток
File.seekg(ios::beg); //переход в начало файла
File.get(ch); //чтение одного символа
cout << ch << endl; //отображение его
File.close();
}
21. Пример
//Пример 2: Использование read() и write()
#include <fstream.h>
#include <string.h>
void main()
{
fstream File("test_file.txt",ios::out | ios::in | ios::binary);
char arr[13];
strcpy(arr,"Hello World!"); //Помещаем данные в массив
File.write(arr,5); //помещаем первые 5 символов в файл т.е. "Hello"
File.seekg(ios::beg); //перемещаемся в начало файла
static char read_array[10]; //Будем считывать данные в эту переменную
File.read(read_array,3); //считываем первые 3 символа, т.е. "Hel"
cout << read_array << endl; //отображаем
File.close();
}
22. Пример
#include <fstream>
void main()
{
//Если у нас есть слово "Hello" в файле test_file.txt
ifstream File("test_file.txt");
char arr[10];
File.read(arr,10);
//мы должны увидеть 5, т.к. Hello длинной 5 символов
cout << File.tellg() << endl;
File.close();
}