Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101

Сохранить данные в текстовый файл

19.03.2018, 19:41. Показов 1719. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Искала подобную тему, но там так и не было раскрыто ,почему появляются непонятные символы в блокноте при открытии текстового файла. Долго пытаюсь добиться того, чтобы читалось в блокноте. У меня структура расписания поезда. Нужно выводить в таком формате:
количество записей
Anapa:Volgograd:3400:00):...
Belgorod:Tambov:56:...
И так далее, чтобы выводились в текстовый файл все поля записи, возникли проблемы с выводом. Помогите, пожалуйста.
Пыталась заменить toAscii() на Latin1(), но ничего не появляется, только пробелы, а toAscii() вообще не компилируется, пишут, что такой функции нет у QString. Подскажите)
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
// Сохранить данные в заданный файл
void dataBaseTrain::save()
 {
    int a = datMod.count();
    int i=0;
    DWORD lpNumberOfBytesWritten;
    //дескриптор открытого файла HANDLE
    HANDLE hFile = CreateFile(TEXT("file.txt"), GENERIC_READ | GENERIC_WRITE, 0, NULL, 
    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//открывается или создается файл
    
    WriteFile(hFile,&a,sizeof(int),&lpNumberOfBytesWritten,NULL);//запись в файл
    timetableTrain buf;
    QString type;
    for(i; i<a;i++)                 //существует след.элемент
    {
        buf = datMod[i];
        forSave temp = dataBaseTrain::tostruct(buf);
        /*struct forSave
        {   
            QString nameDeparture;  // Название пункта отправления, не более 30 символов, первая буква- заглавная
            QString nameArrival;    // Название пункта прибытия, не более 30 символов, первая буква- заглавная
            QString trainNumber;    // Номер поезда, не более 10 символов, состоит из цифр
            QTime timeDeparture;    // Время пункта отправления
            QTime timeArrival;      // Время пункта прибытия
            int durationCounter;    // Длительность в сутках [0, 10]
            int onePereodicity;     // Периодичность
            bool oneDaysWeek[7];    // Массив значений дней недели
            bool flag;              // Флаг, показывающий скорый ли поезд
            unsigned int Id;        // Идентификатор
    
        };*/
        //вывод
                type.setNum(a);
        WriteFile(hFile,(LPCVOID)type.toLatin1().data(),(DWORD)type.size()*sizeof(char),(LPDWORD)&a,NULL);
        WriteFile(hFile,(LPCVOID)" ",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
                 type.clear();
                 WriteFile(hFile, "\r\n", 2, &lpNumberOfBytesWritten, NULL);
                 WriteFile(hFile,(LPCVOID)temp.nameDeparture.toLatin1().data(),(DWORD)temp.nameArrival.count()*sizeof(char),
                (LPDWORD)&a,NULL);
        WriteFile(hFile,(LPCVOID)":",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
        WriteFile(hFile,(LPCVOID)temp.nameArrival.toLatin1().data(),(DWORD)temp.nameArrival.count()*sizeof(char),(LPDWORD)&a,NULL);
        WriteFile(hFile,(LPCVOID)":",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
/*Дальше уже не рассматривала пока...*/
        type.setNum(temp.durationCounter);
        //WriteFile(hFile,(LPCVOID)type.toAscii().data(),(DWORD)type.size()*sizeof(char),(LPDWORD)&a,NULL);//Не работает
        WriteFile(hFile,(LPCVOID)":",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
        type.clear();
    }
    
    CloseHandle(hFile);//закрытие файла
    fileIsModified=false;                   //сброс признака измененной БД
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.03.2018, 19:41
Ответы с готовыми решениями:

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

Сохранить данные, введенные в TextBox, в переменной типа string
Здравствуйте, подскажите как в Visual Studio 2013 создать TextBox и прикрепить к нему переменную(string), что бы все введённые данные в...

Данные из DataGridView сохранить в текстовый файл
dataGridView1 сохранить в текстовый файл using System; using System.Collections.Generic; using System.ComponentModel; using...

3
18 / 18 / 15
Регистрация: 19.03.2018
Сообщений: 49
19.03.2018, 20:39
С Qt не знаком, но может стоит попробовать fstream? С ним таких проблем ни разу не наблюдал.

ifstream - Для чтения файла
ofstream - Для сохранения файла
0
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
19.03.2018, 21:01  [ТС]
Вроде выводит всё, что я хотела:
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Сохранить данные в заданный файл
void dataBaseTrain::save()
 {
    //Плохо, когда уже есть файл file.txt, белиберда иногда в конце выходит
    int a =datMod.count();
    DWORD lpNumberOfBytesWritten;
    //дескриптор открытого файла HANDLE
    HANDLE hFile = CreateFile(TEXT("file.txt"), GENERIC_READ | GENERIC_WRITE, 0, NULL, 
    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//открывается или создается файл
    
    //вывод
    char *s=new char[11];
    s=itoa(a, s, 10);
    WriteFile(hFile,s, strlen(s),&lpNumberOfBytesWritten,NULL); //Записываем количество записей
    WriteFile(hFile, "\r\n", 2, &lpNumberOfBytesWritten, NULL);
 
    QString type="";
    for(int i=0; i<a;i++)                   //существует след.элемент
    {
        QList<int>::iterator idx;
 
        idx = idOrder.begin()+i;
        timetableTrain buf;
        buf = datMod.value(*idx);
        writeInFile(hFile, buf.nameDeparture,":",a);    
        writeInFile(hFile, buf.nameArrival,":",a);
        writeInFile(hFile, buf.trainNumber,":",a);
        
        QString time= buf.timeDeparture.toString("hh:mm");
        WriteFile(hFile,(LPCVOID)"(",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
        writeInFile(hFile, time,")",a);
        WriteFile(hFile,(LPCVOID)":",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
 
        time= buf.timeArrival.toString("hh:mm");
        WriteFile(hFile,(LPCVOID)"(",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
        writeInFile(hFile, time,")",a);
        WriteFile(hFile,(LPCVOID)":",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
 
        type.setNum(buf.durationCounter);
        writeInFile(hFile, type,":",a);
        type.clear();
 
        type.setNum(buf.onePereodicity);
        writeInFile(hFile, type,":",a);
        type.clear();
 
        //Дни недели
        for(int j=0;j<7;j++)
        {
            if(buf.oneDaysWeek[j]==true)
            {
                type="true";
                WriteFile(hFile,(LPCVOID)"(",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
                time.setNum(j);
                WriteFile(hFile,(LPCVOID)time.toLatin1().data(),(DWORD)time.count()*sizeof(char),(LPDWORD)&a,NULL);
                WriteFile(hFile,(LPCVOID)"-",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
                writeInFile(hFile, type,")",a);
                WriteFile(hFile,(LPCVOID)":",(DWORD)sizeof(char),(LPDWORD)&a,NULL);
                type.clear();
            }
        }       
        //Флаг
        if(buf.flag==true)
            type="true";
        else
            type="false";
        writeInFile(hFile, type,":",a);
        type.clear();
        type.setNum(buf.Id);
        WriteFile(hFile,(LPCVOID)type.toLatin1().data(),(DWORD)type.count()*sizeof(char),(LPDWORD)&a,NULL);
        type.clear();
        WriteFile(hFile, "\r\n", 2, &lpNumberOfBytesWritten, NULL);
        a=datMod.count();
    }
    
    CloseHandle(hFile);//закрытие файла
    fileIsModified=false;                   //сброс признака измененной БД
}
void dataBaseTrain::writeInFile(HANDLE hFile, QString str,char symbol[1],int a)
{
    WriteFile(hFile,(LPCVOID)str.toLatin1().data(),(DWORD)str.count()*sizeof(char),(LPDWORD)&a,NULL);
    WriteFile(hFile,(LPCVOID)symbol,(DWORD)sizeof(char),(LPDWORD)&a,NULL);
}
Теперь буду пытаться загружать в базу данных из файла
Миниатюры
Сохранить данные в текстовый файл  
0
2 / 2 / 3
Регистрация: 04.03.2017
Сообщений: 101
19.03.2018, 22:54  [ТС]
Нужно только средствами Win API. Подскажите, как теперь можно считать этот файл в базу данных. Начала пока так:
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
/*! 
*   Загрузить данные из заданного файла,при этом предыдущие данные уничтожаются
*   \param [in] filename — имя файла
*   \return возвращает false, если сохранить данные не удалось
*/
bool dataBaseTrain::load()
{
    timetableTrain other;
    HANDLE hFile = CreateFile(TEXT("file.txt"), GENERIC_READ, 0, NULL, 
    OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
    char inBuffer[7000];
    DWORD lpNumberOfBytesWritten;
    DWORD dwSize = GetFileSize(hFile, NULL);
    
    // attempt an asynchronous read operation
    bool bResult = ReadFile(hFile, &inBuffer,sizeof(char)*7000, &lpNumberOfBytesWritten, NULL) ;
 
    int i = 3;
    int count = (int)inBuffer[0];
    QString str="";
    /*if(inBuffer[i]!='\r' && inBuffer[i]!= '\n')
    {*/
    doStr(str,i,inBuffer);
    other.nameDeparture=str;
    doStr(str,i,inBuffer);
    other.nameArrival=str;
    doStr(str,i,inBuffer);
    other.trainNumber=str;
 
    doStr(str,i,inBuffer);
    other.timeDeparture=QTime::fromString(str, "hh:mm");
    doStr(str,i,inBuffer);
    other.timeArrival=QTime::fromString(str, "hh:mm");
 
    doStr(str,i,inBuffer);
    other.durationCounter=str.toInt();
    doStr(str,i,inBuffer);
    other.onePereodicity=str.toInt();
    if(other.onePereodicity==3)
    {
        //Дни недели
    }
 
    doStr(str,i,inBuffer);
    if(str=="false")
        other.flag="false";
    else
        other.flag="true";
 
 
    CloseHandle(hFile);//закрытие файла
    return true;
}
 
void dataBaseTrain::doStr(QString &str, int &i,char inBuffer[7000])
{
    str="";
    while(inBuffer[i]!='*')
    {
        if(inBuffer[i]!='(' && inBuffer[i]!=')')
            str.append(inBuffer[i]);
        i++;
    }
    i++;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2018, 22:54
Помогаю со студенческими работами здесь

Сохранить данные из ListView в текстовый файл
НА форме listview и кнопка. listview состоит из 2х столбцов как сохранить данные в текстовое поле из listview с разделителем | между...

Как сохранить данные из формы в текстовый файл ? (0)
Subj Tnx

Через SaveFileDialog сохранить данные в текстовый файл
Через SaveFileDialog сохранить данные в текстовый файл с ListView1. Так как в ListView 2 столбца в текстовом файле необходимо разделить...

Сохранить данные в текстовый файл, расположенный в ресурсах приложения
Здравствуйте,у меня вопрос,мне нужен способ,с помощью которого я смогу хранить данные типа string и double, в текстовом файле к примеру ,...

SaveTextFileDialog - как из поля Memo1 сохранить в текстовый файл данные???
Есть SaveTextFileDialog1 и поле Memo1 с текстом. - как из поля Memo1 сохранить в текстовый файл все данные ?? if...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru