Thread: C++ text file

  1. #1
    Registered User
    Join Date
    Jun 2008
    Posts
    4

    Unhappy C++ text file

    How make a program (function), which read text file and put a message on screen when date and time are equal of system date,time.
    In text file are informations: date, time and a message.

    Example text file:
    06/03/08
    11:30:00
    Prepare lunch!

    When put the message should be a message box.
    ex.program, but not compare with date and time....

    Code:
    #include <windows.h>
    #include <cstdlib>
    #include <iostream>
    #include <time.h>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
    char date [9];
    char time [9];
    char time_dat [9];
    char date_dat [9];
    
    //cout << "Date : " << _strdate(date) <<endl;
    //cout << "Time : " << _strtime(time) <<endl;
    
    string line;
    ifstream myfile ("Scheduler.txt");
    if (myfile.is_open())
    {
    while (!myfile.eof())
    {
    getline (myfile,line);
    cout << line << endl;
    }
    myfile.close();
    }
    
    else cout << "Unable to open file";
    
    /*do
    {
    if ( !strcmp(time_dat,time) && !strcmp(date_dat,date) )
    //read message in text file and put (not time)
    if(MessageBox(NULL, time, "Message", MB_ICONINFORMATION) ==IDOK)
    exit(0);
    }
    while(time1 != _strdate(time) && date1 != _strdate(date));*/
    
    return 0;
    }
    Edit/Delete Message

  2. #2
    Frequently Quite Prolix dwks's Avatar
    Join Date
    Apr 2005
    Location
    Canada
    Posts
    8,057
    I guess that you need to be able to determine the current time, and then once you have determined that the message should be displayed, you need to display the message. I see you have a commented-out call to MessageBox(), so I think you have that down.

    So you just need to be able to get the current time, and compare the stored time with the current time.

    Here's how I would do it: use file streams to parse something like "06/03/08" into numbers that you can actually use. For example:
    Code:
    ifstream file("file.txt");
    int day, month, year;
    
    file >> day;
    file.ignore(1);
    file >> month;
    file.ignore(1);
    file >> year;
    file.ignore(1);
    
    file.close();
    Once you have a numerical representation of the stored date, you need to get the current time. Here's one way to do it.
    Code:
    time_t now;
    struct tm *local;
    
    time(&now);
    local = localtime(&now);
    
    cout << local->tm_mday << '/' << local->tm_mon << '/' << local->tm_year << endl;
    There are lots of functions you can use to manipulate time_ts etc. http://cppreference.com/stddate/index.html

    Here are the members of struct tm: http://www.cplusplus.com/reference/c.../ctime/tm.html

    Hopefully this will help you figure it out.
    dwk

    Seek and ye shall find. quaere et invenies.

    "Simplicity does not precede complexity, but follows it." -- Alan Perlis
    "Testing can only prove the presence of bugs, not their absence." -- Edsger Dijkstra
    "The only real mistake is the one from which we learn nothing." -- John Powell


    Other boards: DaniWeb, TPS
    Unofficial Wiki FAQ: cpwiki.sf.net

    My website: http://dwks.theprogrammingsite.com/
    Projects: codeform, xuni, atlantis, nort, etc.

  3. #3
    Registered User
    Join Date
    Jun 2008
    Posts
    4

    nt service

    I use your code but not work...
    yes, I need to be able to get the current time, and compare the stored time with the current time and put the message on screen.

    Example text file:
    06/03/08
    11:30:00
    Prepare lunch!

    why not use first line and compare with current date, second line compare with current time
    if equal put the message on screen?

  4. #4
    Registered User
    Join Date
    Jun 2008
    Posts
    4

    need help

    i write a program as service but have a problem about a time(date)
    how implement that the program compare a storage time(date) with the system time(date), when read a file and put the message (Go to cinema!)

    ex. have a text file:
    06/05/08
    20:30:00
    Go to cinema!

    program:
    Code:
    #include <process.h>
    #include <iostream>
    #include <time.h>
    #include <fstream>
    #include <string>
    #include <tchar.h>
    #include <stdio.h>
    #include <windows.h>
    #include <winbase.h>
    #include <winsvc.h>
    
    //  Service.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    #define        MAX_NUM_OF_PROCESS        4
    /** Window Service **/
    VOID ServiceMainProc();
    VOID Install(char* pPath, char* pName);
    VOID UnInstall(char* pName);
    VOID WriteLog(char* pFile, char* pMsg);
    BOOL KillService(char* pName);
    BOOL RunService(char* pName);
    VOID ExecuteSubProcess();
    VOID ProcMonitorThread(VOID *);
    
    VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
    VOID WINAPI ServiceHandler(DWORD fdwControl);
    
    
    /** Window Service **/
    const int nBufferSize = 500;
    CHAR pServiceName[nBufferSize+1];
    CHAR pExeFile[nBufferSize+1];
    CHAR lpCmdLineData[nBufferSize+1];
    CHAR pLogFile[nBufferSize+1];
    BOOL ProcessStarted = TRUE;
    
    CRITICAL_SECTION        myCS;
    SERVICE_TABLE_ENTRY        lpServiceStartTable[] = 
    {
        {pServiceName, ServiceMain},
        {NULL, NULL}
    };
    
    LPTSTR ProcessNames[MAX_NUM_OF_PROCESS];
    
    SERVICE_STATUS_HANDLE   hServiceStatusHandle; 
    SERVICE_STATUS          ServiceStatus; 
    PROCESS_INFORMATION    pProcInfo[MAX_NUM_OF_PROCESS];
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        if(argc >= 2)
            strcpy(lpCmdLineData, argv[1]);
        ServiceMainProc();
        return 0;
    }
    
    VOID ServiceMainProc()
    {
        ::InitializeCriticalSection(&myCS);
        // initialize variables for .exe and .log file names
        char pModuleFile[nBufferSize+1];
        DWORD dwSize = GetModuleFileName(NULL, pModuleFile, nBufferSize);
        pModuleFile[dwSize] = 0;
        if(dwSize>4 && pModuleFile[dwSize-4] == '.')
        {
            sprintf(pExeFile,"%s",pModuleFile);
            pModuleFile[dwSize-4] = 0;
            sprintf(pLogFile,"%s.log",pModuleFile);
        }
        //name of process
        strcpy(pServiceName,"SkyDiver");
    
        if(_stricmp("-i",lpCmdLineData) == 0 || _stricmp("-I",lpCmdLineData) == 0)
            Install(pExeFile, pServiceName);
        else if(_stricmp("-k",lpCmdLineData) == 0 || _stricmp("-K",lpCmdLineData) == 0)
            KillService(pServiceName);
        else if(_stricmp("-u",lpCmdLineData) == 0 || _stricmp("-U",lpCmdLineData) == 0)
            UnInstall(pServiceName);
        else if(_stricmp("-s",lpCmdLineData) == 0 || _stricmp("-S",lpCmdLineData) == 0)
            RunService(pServiceName);
        else
            ExecuteSubProcess();
    }
    
    VOID Install(char* pPath, char* pName)
    {  
        SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_CREATE_SERVICE); 
        if (schSCManager==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            SC_HANDLE schService = CreateService
            ( 
                schSCManager,    /* SCManager database      */ 
                pName,            /* name of service         */ 
                pName,            /* service name to display */ 
                SERVICE_ALL_ACCESS,        /* desired access          */ 
                SERVICE_WIN32_OWN_PROCESS|SERVICE_INTERACTIVE_PROCESS , /* service type            */ 
                SERVICE_AUTO_START,      /* start type              */ 
                SERVICE_ERROR_NORMAL,      /* error control type      */ 
                pPath,            /* service's binary        */ 
                NULL,                      /* no load ordering group  */ 
                NULL,                      /* no tag identifier       */ 
                NULL,                      /* no dependencies         */ 
                NULL,                      /* LocalSystem account     */ 
                NULL
            );                     /* no password             */ 
            if (schService==0) 
            {
                long nError =  GetLastError();
                char pTemp[121];
                sprintf(pTemp, "Failed to create service %s, error code = %d\n", pName, nError);
                WriteLog(pLogFile, pTemp);
            }
            else
            {
                char pTemp[121];
                sprintf(pTemp, "Service %s installed\n", pName);
                WriteLog(pLogFile, pTemp);
                CloseServiceHandle(schService); 
            }
            CloseServiceHandle(schSCManager);
        }    
    }
    
    VOID UnInstall(char* pName)
    {
        SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); 
        if (schSCManager==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            SC_HANDLE schService = OpenService( schSCManager, pName, SERVICE_ALL_ACCESS);
            if (schService==0) 
            {
                long nError = GetLastError();
                char pTemp[121];
                sprintf(pTemp, "OpenService failed, error code = %d\n", nError);
                WriteLog(pLogFile, pTemp);
            }
            else
            {
                if(!DeleteService(schService)) 
                {
                    char pTemp[121];
                    sprintf(pTemp, "Failed to delete service %s\n", pName);
                    WriteLog(pLogFile, pTemp);
                }
                else 
                {
                    char pTemp[121];
                    sprintf(pTemp, "Service %s removed\n",pName);
                    WriteLog(pLogFile, pTemp);
                }
                CloseServiceHandle(schService); 
            }
            CloseServiceHandle(schSCManager);    
        }
        DeleteFile(pLogFile);
    }
    
    
    VOID WriteLog(char* pFile, char* pMsg)
    {
        // write error or other information into log file
        ::EnterCriticalSection(&myCS);
        try
        {
            SYSTEMTIME oT;
            ::GetLocalTime(&oT);
            FILE* pLog = fopen(pFile,"a");
            fprintf(pLog,"%02d/%02d/%04d, %02d:%02d:%02d\n    %s",oT.wMonth,oT.wDay,oT.wYear,oT.wHour,oT.wMinute,oT.wSecond,pMsg); 
            fclose(pLog);
        } catch(...) {}
        ::LeaveCriticalSection(&myCS);
    }
    
    BOOL KillService(char* pName) 
    { 
        // kill service with given name
        SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); 
        if (schSCManager==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            // open the service
            SC_HANDLE schService = OpenService( schSCManager, pName, SERVICE_ALL_ACCESS);
            if (schService==0) 
            {
                long nError = GetLastError();
                char pTemp[121];
                sprintf(pTemp, "OpenService failed, error code = %d\n", nError);
                WriteLog(pLogFile, pTemp);
            }
            else
            {
                // call ControlService to kill the given service
                SERVICE_STATUS status;
                if(ControlService(schService,SERVICE_CONTROL_STOP,&status))
                {
                    CloseServiceHandle(schService); 
                    CloseServiceHandle(schSCManager); 
                    return TRUE;
                }
                else
                {
                    long nError = GetLastError();
                    char pTemp[121];
                    sprintf(pTemp, "ControlService failed, error code = %d\n", nError);
                    WriteLog(pLogFile, pTemp);
                }
                CloseServiceHandle(schService); 
            }
            CloseServiceHandle(schSCManager); 
        }
        return FALSE;
    }
    
    BOOL RunService(char* pName) 
    { 
        // run service with given name
        SC_HANDLE schSCManager = OpenSCManager( NULL, NULL, SC_MANAGER_ALL_ACCESS); 
        if (schSCManager==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "OpenSCManager failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        else
        {
            // open the service
            SC_HANDLE schService = OpenService( schSCManager, pName, SERVICE_ALL_ACCESS);
            if (schService==0) 
            {
                long nError = GetLastError();
                char pTemp[121];
                sprintf(pTemp, "OpenService failed, error code = %d\n", nError);
                WriteLog(pLogFile, pTemp);
            }
            else
            {
                // call StartService to run the service
                if(StartService(schService, 0, (const char**)NULL))
                {
                    CloseServiceHandle(schService); 
                    CloseServiceHandle(schSCManager); 
                    return TRUE;
                }
                else
                {
                    long nError = GetLastError();
                    char pTemp[121];
                    sprintf(pTemp, "StartService failed, error code = %d\n", nError);
                    WriteLog(pLogFile, pTemp);
                }
                CloseServiceHandle(schService); 
            }
            CloseServiceHandle(schSCManager); 
        }
        return FALSE;
    }
    
    
    VOID ExecuteSubProcess()
    {
        if(_beginthread(ProcMonitorThread, 0, NULL) == -1)
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "StartService failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        if(!StartServiceCtrlDispatcher(lpServiceStartTable))
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "StartServiceCtrlDispatcher failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        }
        ::DeleteCriticalSection(&myCS);
    }
    
    VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
    {
        DWORD   status = 0; 
        DWORD   specificError = 0xfffffff; 
     
        ServiceStatus.dwServiceType        = SERVICE_WIN32; 
        ServiceStatus.dwCurrentState       = SERVICE_START_PENDING; 
        ServiceStatus.dwControlsAccepted   = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PAUSE_CONTINUE; 
        ServiceStatus.dwWin32ExitCode      = 0; 
        ServiceStatus.dwServiceSpecificExitCode = 0; 
        ServiceStatus.dwCheckPoint         = 0; 
        ServiceStatus.dwWaitHint           = 0; 
     
        hServiceStatusHandle = RegisterServiceCtrlHandler(pServiceName, ServiceHandler); 
        if (hServiceStatusHandle==0) 
        {
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "RegisterServiceCtrlHandler failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
            return; 
        } 
     
        // Initialization complete - report running status 
        ServiceStatus.dwCurrentState       = SERVICE_RUNNING; 
        ServiceStatus.dwCheckPoint         = 0; 
        ServiceStatus.dwWaitHint           = 0;  
        if(!SetServiceStatus(hServiceStatusHandle, &ServiceStatus)) 
        { 
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "SetServiceStatus failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        } 
    }
    
    VOID WINAPI ServiceHandler(DWORD fdwControl)
    {
        switch(fdwControl) 
        {
            case SERVICE_CONTROL_STOP:
            case SERVICE_CONTROL_SHUTDOWN:
                ProcessStarted = FALSE;
                ServiceStatus.dwWin32ExitCode = 0; 
                ServiceStatus.dwCurrentState  = SERVICE_STOPPED; 
                ServiceStatus.dwCheckPoint    = 0; 
                ServiceStatus.dwWaitHint      = 0;
                break; 
            case SERVICE_CONTROL_PAUSE:
                ServiceStatus.dwCurrentState = SERVICE_PAUSED; 
                break;
            case SERVICE_CONTROL_CONTINUE:
                ServiceStatus.dwCurrentState = SERVICE_RUNNING; 
                break;
            case SERVICE_CONTROL_INTERROGATE:
                break;
    
        };
        if (!SetServiceStatus(hServiceStatusHandle,  &ServiceStatus)) 
        { 
            long nError = GetLastError();
            char pTemp[121];
            sprintf(pTemp, "SetServiceStatus failed, error code = %d\n", nError);
            WriteLog(pLogFile, pTemp);
        } 
    }
    
    VOID ProcMonitorThread(VOID *)
    {
        while(ProcessStarted == TRUE)
        {
            //WriteLog(pLogFile, "Write service!!!");		
    		FILE *f;
    		int tmp;
    		char c,time[10],date[10],msg[100];
    
    		for(tmp=0;tmp<10;++tmp)
    			time[tmp]='\0';
    		for(tmp=0;tmp<10;++tmp)
    			date[tmp]='\0';
    		for(tmp=0;tmp<10;++tmp)
    			 msg[tmp]='\0';
        
    		tmp=0;
    
    		f=fopen("Scheduler.txt","r");
        
    		while(1)
    		{
    			c=getc(f);
    			if(c==' ')break;
    			time[tmp]=c;
    			++tmp;
    		}
    		tmp=0;
        
    		while(1)
    		{
    			c=getc(f);
    			if(c==' ')break;
    			date[tmp]=c;
    			++tmp;
    		 }
    		tmp=0;
        
    		while(1)
    		{
    			c=getc(f);
    			if(c==EOF)break;
    			msg[tmp]=c;
    			++tmp;
    		}
    		fclose(f);
    
    		MessageBox(NULL,("Time: %s   Date: %s   Message: %s",time,date,msg),"Message window",0);
    	}
    }

  5. #5
    Officially An Architect brewbuck's Avatar
    Join Date
    Mar 2007
    Location
    Portland, OR
    Posts
    7,396
    What happens when the system is so heavily loaded that your program doesn't get a chance to run during the precise second of 11:30:00? The message will get skipped.

  6. #6
    Registered User
    Join Date
    Dec 2007
    Posts
    2,675
    Sigh....copying and pasting random code without understanding it is a poor idea.

    When the service starts, read the date and time, calculate the difference between that time and the current time, and set a timer to expire after that many milliseconds.

  7. #7
    Registered User
    Join Date
    Jun 2008
    Posts
    1
    Quote Originally Posted by rags_to_riches View Post
    Sigh....copying and pasting random code without understanding it is a poor idea.

    When the service starts, read the date and time, calculate the difference between that time and the current time, and set a timer to expire after that many milliseconds.
    Ok, but the "timer" depends on your CPU speed, no? A "millisecond" on a Pentium 2 is different than a millisecond on a Pentium 4, unless that millisecond is the one from the computer clock itself.

  8. #8
    C++まいる!Cをこわせ!
    Join Date
    Oct 2007
    Location
    Inside my computer
    Posts
    24,654
    No, a millisecond is always a millisecond, no matter how fast or slow your CPU is.
    What might matter is how many ticks is executed per millisecond, but the OS takes care of that.
    One millisecond is always one millisecond when you call that function.
    Quote Originally Posted by Adak View Post
    io.h certainly IS included in some modern compilers. It is no longer part of the standard for C, but it is nevertheless, included in the very latest Pelles C versions.
    Quote Originally Posted by Salem View Post
    You mean it's included as a crutch to help ancient programmers limp along without them having to relearn too much.

    Outside of your DOS world, your header file is meaningless.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Formatting the contents of a text file
    By dagorsul in forum C++ Programming
    Replies: 2
    Last Post: 04-29-2008, 12:36 PM
  2. A bunch of Linker Errors...
    By Junior89 in forum Windows Programming
    Replies: 4
    Last Post: 01-06-2006, 02:59 PM
  3. Simple File encryption
    By caroundw5h in forum C Programming
    Replies: 2
    Last Post: 10-13-2004, 10:51 PM
  4. checking values in a text file
    By darfader in forum C Programming
    Replies: 2
    Last Post: 09-24-2003, 02:13 AM
  5. what does this mean to you?
    By pkananen in forum C++ Programming
    Replies: 8
    Last Post: 02-04-2002, 03:58 PM