|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
19.07.2010, 18:36 | #1 |
Регистрация: 12.04.2010
Сообщений: 7
|
Чтение и запись в файл. C++ MFC.
Здравствуйте! Только начал изучать MFC, поэтому задаю глупые вопросы.
Передо мной такая задача: мне нужно организовать получение данных из файла, который выберет пользователь в диалоге. Содержимое файла выглядит примерно так: 1 2 3 4 5 6 7 8 9 и т.д. файл .txt То есть в каждой строке имеется три числа разделенные пробелами. Нужно сделать так, чтобы каждое число в строке сохранялось в отдельную переменную X,Y и K. Например: первая строка X=1,Y=2,K=3, далее вторая строка X=4,Y=5, K=6и так далее, пока не закончится файл. Перерыв достаточно большое количество литературы, я в итоге остановился на таком варианте организации диалога выбора файла: #include <afxwin.h> #include <afxdlgs.h> #include <iostream.h> #include <cstdlib> #include <fstream> #include <stdio.h> using namespace std; void main( void ) { if ( !AfxWinInit( ::GetModuleHandle( NULL ), NULL, ::GetCommandLine( ), 0 ) ) { cerr << _T( "MFC Failed to initialize.\n" ); } CString m_Text; // создание стандартной панели выбора файла Open CFileDialog DlgOpen(TRUE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY,(LPCSTR)" Text Files (*.txt) |*.txt||"); // отображение стандартной панели выбора файла Open if(DlgOpen.DoModal()==IDOK) { // создание объекта и открытие файла для чтения CStdioFile File(DlgOpen.GetPathName(),CFile::m odeRead|CFile::typeBinary); // чтение из файла строки CString& ref=m_Text; File.ReadString(ref); // передается ссылка на строку m_Text cout << "Load string = " << m_Text << endl; } } Однако данный пример читает, только строку целеком, а мне нужно, выделить из этой строки числа стоящие между пробелами. Использовать методы класса CString: Left\Mid\Right не реально, потому что числа генеряться случайно и могут быть любой длины от 0 до 1000. В консольном варианте я это организовал так: #include <fstream> #include <iostream> #include <cstdlib> #include <stdio.h> using namespace std; int main() { int x,y,c; char* fileName = new char[10]; char* buf_x = new char [50]; char* buf_y = new char [50]; char* buf_c = new char [50]; { ifstream* inp = new ifstream("result.txt"); while (!inp->eof()) { inp->getline(buf_x, 50, ' '); inp->getline(buf_y, 50, ' '); inp->getline(buf_c, 50, ' '); x=atoi(buf_x); y=atoi(buf_y); c=atoi(buf_c); cout << x << " " << y << " " << c; cout << "\n"; } } system("PAUSE"); return 0; } Но как это использовать в MFC ума не приложу. Вобщем, посоветуйте пожалуйста, как мне решить данную проблему? Заранее благодарен! P.S. Если я описал задачу не достаточнго понятно, задавайте пожалуйста уточняющие вопросы, постараюсь ответить как можно быстрее. |
19.07.2010, 18:50 | #2 |
Регистрация: 12.04.2010
Сообщений: 7
|
Еще мне в голову приходил вариант сохранять считанные строки в другой файл, путь к которому мне заранее известен, чтобы можно было потом воспользоваться тем способом, который я сделал для консольного приложения.
Соответственно я кое что добавил: #include <afxwin.h> #include <afxdlgs.h> #include <iostream.h> #include <cstdlib> #include <fstream> #include <stdio.h> using namespace std; void main( void ) { if ( !AfxWinInit( ::GetModuleHandle( NULL ), NULL, ::GetCommandLine( ), 0 ) ) { cerr << _T( "MFC Failed to initialize.\n" ); } CString m_Text; // создание стандартной панели выбора файла Open CFileDialog DlgOpen(TRUE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY,(LPCSTR)" Text Files (*.txt) |*.txt||"); // отображение стандартной панели выбора файла Open if(DlgOpen.DoModal()==IDOK) { // создание объекта и открытие файла для чтения CStdioFile File(DlgOpen.GetPathName(),CFile::m odeRead|CFile::typeBinary); // чтение из файла строки for(int i=0;i<100;i++) CString& ref=m_Text; File.ReadString(ref); // передается ссылка на строку m_Text // ============ ТО, ЧТО ДОБАВИЛ =================== CStdioFile File("c:\\temp\\temp.txt",CFile::mo deCreate|CFile::modeWrite|CFile::ty peBinary); // запись в файл строки m_Text=m_Text+" "; File.WriteString((LPCTSTR)m_Text); cout << "Load string = " << m_Text << endl; } } } Но, к сожалению столкнулся с другой проблемой. Все строки записываются в первую строку файла temp.txt, то есть, сколько бы строк не было в исходном файле в мой файл сохраняется только одна - последняя. Соответственно вопрос: как организовать переход на следующую строку при записи, вышеуказанным методом? И второй вопрос: как узнать количество строк в файле, из которого я читаю? Спасибо! |
19.07.2010, 19:53 | #3 |
Форумчанин
Регистрация: 28.07.2009
Сообщений: 189
|
Да использовал бы стандартую С++ библиотеку <stdio.h>
FILE*f;
пишу программы для студентов и школьников на Pascal, Delphi, C++, WINAPI, assembler
обучаю программированию на паскале(дистанционно);mail: hruslow@gmail.com |
19.07.2010, 20:04 | #4 |
Регистрация: 12.04.2010
Сообщений: 7
|
Для: D@rkD@iver
Дело в том, что необходимо организовать для пользователя возможность выбора файла для обработки. А как это организовать с помощью <stdio.h> ? Я не смог ничего найти по этому вопросу. Все примеры в учебниках описывают чтение из файла путь, к которому явно указан в программе. Например: С://temp//file.txt А если я не знаю имя файла и где он находится, то не могу указать и путь к нему. Может подскажите способ с применением <stdio.h> Или хотя бы каую-нибудь книгу где эта библиотека максимально подробно описана? |
02.08.2010, 17:18 | #5 |
Пользователь
Регистрация: 18.05.2010
Сообщений: 87
|
Здравствуйте.
Прочитал вашу тему про запись и чтение из txt файла в С++ MFC, просто я столкнулся с такой же проблемой, и моих знаний и опыта не хватает для того чтоб решить этот вопрос. Вот и хочу попросить чтоб вы посоветовали что можно почитать по этому поводу, и вообще хорошие книги по Visual Studio, а то малоли какие трудности ещё по ходу могут возникнуть. А второе - если у вас получилось решить эту пробему, не моглибы вы поделиться решением, мне бы это очень сильно помогло как учебный пример. Заранее спасибо. |
02.08.2010, 18:39 | #6 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Собственно, сделать диалог для пользователя нетрудно:
Код:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
Последний раз редактировалось Syuf; 02.08.2010 в 18:44. |
02.08.2010, 18:50 | #7 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Строки можно читать так:
Код:
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
02.08.2010, 19:02 | #8 |
Форумчанин
Регистрация: 02.02.2010
Сообщений: 599
|
Вы посмотрите в Интернете - все я вам все равно написать не смогу, а класс CFileDialog - хорошая довольно-таки вещь с большими возможностями. И не стоит MFC осваивать "между делом" - большинство возможностей останется в стороне. Могу еще позанудствовать, но нету времени - посмотрите, короче, тут:
http://www.cyberguru.ru/programming/...rs-page34.html http://msdn.microsoft.com/en-us/libr...e7(VS.80).aspx http://www.firststeps.ru/mfc/steps/r.php?15 http://www.dotnetheaven.com/Uploadfi...gTutorial.aspx http://www.codersource.net/mfc/mfc-t...iledialog.aspx http://www.rsdn.ru/Forum/Info/FAQ.mf...winnt0500.aspx Или в общем случае - тут: http://www.google.ru/search?source=i...=&oq=&gs_rfai=
"Лишь то читается легко, что написано с трудом; что в час написано, то в час и позабыто."
|
05.08.2010, 19:01 | #9 |
Пользователь
Регистрация: 18.05.2010
Сообщений: 87
|
спасибо, думаю мне всё это очень пригодится)
|
01.09.2010, 19:50 | #10 |
Пользователь
Регистрация: 18.05.2010
Сообщений: 87
|
А может ктони будь может это сделать только в моногооконном приложении сделанном AppWizard? а то уже месяц бьюсь дальше открытия файла там не продвинулся....
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Visual C++ MFC Запись/чтение в файл | qazzz | Фриланс | 3 | 19.03.2010 22:02 |
Чтение и запись в файл. | Ky3Heu, | Помощь студентам | 0 | 01.01.2010 11:24 |
Чтение и запись в файл | deagle05 | Общие вопросы C/C++ | 3 | 22.12.2009 00:11 |
Чтение/запись в файл в StringGrid | SVadiks | Помощь студентам | 0 | 03.12.2009 22:14 |
Запись в файл и чтение из него. | Swool | Общие вопросы C/C++ | 8 | 26.08.2008 16:39 |