|
sorry about that- screwed up the formatting-
Value = getc(pFile); // put first byte in Value Value = (Value << 8) + (getc(pFile)); //move everything over 1 byte
is supposed to read
Value = getc(pFile); // put first byte in Value
Value = (Value << 8) + (getc(pFile)); //move everything over 1 byte
regzim
|
|
|
|
|
no problem.
just a note on getc v fread: it's generally faster to read as much at a time as you can. with 4 bytes v 1 byte, the difference might not be great, but in general, it's worth the trouble to avoid single-byte reads, if you can do a multi-byte read.
|
|
|
|
|
Hey guys, it has been a while /cry. I seem to be having some issues with comparing values in a file, such as finding the highest value in a file in mixed order and outputting to a file in correct order. I have a file created with the following text 4,3,1,2, my object is to find the highest value then output to a file in correct orsder to 1,2,3,4. This is all I have and I am a little rusty cause it has been a while:
// iofilecomp.cpp : Defines the entry point for the console application.
// iofilecomp.cpp : Explains how to copy the contents from one file to another.
//
#include "stdafx.h"
#include <conio.h>
#include <string>
#include <fstream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream ins; //reads from file
ofstream ous; //writes to file
ins.open("in.dat");
ous.open("ou.dat");
string line;
if( ins.is_open )
{
while ( ! ins.eof() )
{
getline(ins, line);
cout << line << endl;
}
ins.close();
}
else cout << "Unable to open file.";
ous.close();
_getch();
return 0;
}
The above will only output in the order read from the file. Possibly could I get some assistance or pointed in the right direction please. Thank you.
|
|
|
|
|
read the file like you do, put the values in a vector , sort the vector and write it back to a file.
|
|
|
|
|
Herboren wrote: ...my object is to find the highest value then output to a file in correct orsder to 1,2,3,4.
If you are simply writing the values to a file in ascending order, why bother with finding the highest value?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
have a file created with the following text 4,3,1,2, my object is to find the highest value then output to a file in correct orsder to 1,2,3,4. This is all I have and I am a little rusty cause it has been a while:
Go back and re-read what I typed , I never stated that it was pre written in ascending order. in the first line in big characters is what I had said.
|
|
|
|
|
Herboren wrote: my object is to...output to a file in correct orsder to 1,2,3,4.
How is that not writing to the file in ascending order?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
=D Basically I have a pre-written file with random numbers, then locating the highest number in that file, (yes I know what the highest number is I just want the program to do it) then comparing the highest number to the other integers in that file and placing them in correct order in a different file, I dont know any other basic way to put it.
|
|
|
|
|
Herboren wrote: ...I dont know any other basic way to put it.
Maximilien told you how to do it, while Stephen showed you how.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi,
If you want the list of numbers to be written back in the file in ascending order, then all u have to do is sort the numbers u have as many others have mentioned, the sorting takes care of the highest number in each case.
locating the highest number in the file helps to sort only 1 time. say 4 3 1 2, now u find the highest number to be 4 and then u write as 3 1 2 4. now from the remaining 3 numbers u have to again find the highest which is 3 and then sort as 1 2 3 4. this is highly inefficient way of doing. this is called bubble sort i suppose. there are many algorithms like quick sort, heap sort for reading a string of values and writing them back in the desired order (ascending or descending). hope u find it useful.
regards,
-cedance
|
|
|
|
|
As a matter of fact it was bubble sort, from what I recall my last teacher telling us about it, I had totally forgotten about it but popped when you mention it. That why I wasnt familiar with the heap or quick sort, I suppose she wanted us to do something hard so that way we knew how to understand it afterwards.
|
|
|
|
|
Try something like this:
#include "StdAfx.h"
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
int main()
{
using namespace std;
ifstream in("C:\\In.txt");
if (!in)
{
cerr << "Failed to open input file!" << endl;
return 1;
}
ofstream out("C:\\Out.txt");
if (!out)
{
cerr << "Failed to open output file!" << endl;
return 2;
}
vector<int> nums;
copy(istream_iterator<int>(in), istream_iterator<int>(), back_inserter(nums));
sort(nums.begin(), nums.end());
copy(nums.begin(), nums.end(), ostream_iterator<int>(out, "\n"));
return 0;
}
Note I read the whole file into a std::vector , sort it and then output the results.
Steve
|
|
|
|
|
I did find something rather useful and did find your code very useful working with vectors. Something called an insertion sort. looks custom but does a nice job.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
#include <insertion_sort.h>
int main()
{
double vals[25];
int n=25;
srand((unsigned int) time(NULL));
for (int i=0; i<n; i++) vals[i]=((double) n*rand())/RAND_MAX;
printf("\nArray to be sorted:\n");
for (int i=0; i<n; i++) printf("%3.0f ", vals[i]);
Array::Sort::insertionSort<double>(vals, n);
printf("\n Sorted array:\n");
for (int i=0; i<n; i++) printf("%3.0f ", vals[i]);
printf("\n");
return 0;
}
here is the location of the header. <a href="http://www.stepanovpapers.com/algSimMeas/insertion_sort.H" rel="nofollow">Insertion Sort</a>
-- modified at 17:33 Sunday 11th March, 2007
|
|
|
|
|
You can do better then an insertion sort which is O(n^2). Use the STL's sort algorithm which comes with your compiler and get O(N log(N)) complexity. To access the algorithm include <algorithm> and replace the sorting code with this:
std::sort(vals, vals+n);
See http://www.devx.com/vb2themax/Article/19900[^] for a comparison of the efficiencies of different sorting algorithms.
For things like sorting and the like the STL will suite your needs just fine and you're better of learning it then downloading equivalent or inferior code.
Steve
|
|
|
|
|
Hi,
I've made a little Window with the MFC, but when reposition the window and then select new, the window jums some lines down and some lines right. Did you know how i could avoid this ?
void CTestView::OnFileNew()
{
CRect rc;
GetWindowRect (&rc);
CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
CClientDC dc(this);
dc.SetMapMode (MM_TEXT);
dc.LPtoDP (&rc);
// ClientToScreen (&rc);
pFrame->SetWindowPos (&CWnd::wndTop, rc.left, rc.top, 200, 100 ,SWP_NOREPOSITION);
}
Here is my codr, i hope you can help me !
Many THX
CrocodileBuck
|
|
|
|
|
CrocodileBuck wrote: the window jums some lines down and some lines right. Did you know how i could avoid this ?
Yes. Don't move the window!
What are you trying to do to the rect there?
Mark
"Great job, team. Head back to base for debriefing and cocktails."
(Spottswoode "Team America")
|
|
|
|
|
Hi Mark,
thx for your quick reply!
! What are you trying to do to the rect there? !
What do you mean exactly ?
I need the rect for Set WindowPos() function cause SetWindowPos needs the x and y Coord of the Window.
But i onla want to chance the width and height of the window and i want it to keep his place when i move the window and click on new in the menue !
I hope you know what i want and sry for my bad engLish
Buck
|
|
|
|
|
CrocodileBuck wrote: I need the rect for Set WindowPos() function cause SetWindowPos needs the x and y Coord of the Window.
But i onla want to chance the width and height of the window...
While SetWindowPos() is ignoring them, you might want to go ahead and specifiy 0 for x and y . The last argument should also be changed to SWP_NOMOVE .
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
SetWindowPos() ignores nothing !
When i Set X and Y to 0 the Window jumps to the upper left corner of the screen, but i want it to stay where i moved it to. I only want to change the With and height of the window and not its position !
Buck
|
|
|
|
|
CrocodileBuck wrote: SetWindowPos() ignores nothing !
It does if you use it correctly.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
OK. coud you pleeeese explain me how i use it correctly????
pleeese i am coding the mfc since 2 weeks and try to solfe this prob since Sunday please david help me to get it working correctly !
Buck
|
|
|
|
|
AAAAAAAAAHHHHHRRGGGGGGGGGGHHHHHHHHHHHHHHHH!!!!!!!!!!!!!!!!
SWP_NOMOVE
Retains the current position (ignores X and Y parameters).
YYYIIIIIIIIIIPPPIIIIIIEEEEEEYAAAAAAAAAYEEEEEEEEEEEEAAAAAAAAAAAAAHHHHHH!
THX David it was you who kicked me to the Flags
Buck
|
|
|
|
|
void CTestView::OnFileNew()
{
CRect rc;
GetWindowRect (&rc);
CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
CClientDC dc(this);
dc.SetMapMode (MM_TEXT);
dc.LPtoDP (&rc);
// ClientToScreen (&rc);
pFrame->SetWindowPos (&CWnd::wndTop, 0, 0, 200, 100 ,SWP_NOREPOSITION|SWP_NOMOVE); //add one more flag SWP_NOMOVE
}
life is like a box of chocolate,you never know what you r going to get.
|
|
|
|
|
I see you have a solution cool!
I just meant the SetMapMode and LPtoDP stuff.
Seems to me simply doing something like this would work -
CMainFrame *pFrame = (CMainFrame*)AfxGetMainWnd();
CRect rc;
pFrame->GetWindowRect (&rc);
pFrame->MoveWindow (rc.left, rc.top, 200, 100);
"Great job, team. Head back to base for debriefing and cocktails."
(Spottswoode "Team America")
|
|
|
|
|
Greetings:
I have this CListCtrl in a dialog and it has the potential to have to display 10's of thousands of records. Originally, I created all the rows and populated ALL of the text items but this took a prohibitively long time.
I had thought that it was the text preparation part of the process that was taking so long, so I tried just creating the columns and ALL of the rows I needed but not filling the rows in until the user scrolled. I would then fill in only the rows that came into view. My assumption was incorrect as I discovered that what was taking a great deal of the time was just creating all of the empty rows.
What is the usual approach to handling this? The main requirement that I have is that the vertical scroll bar on the list control still reflect the actual number of records that I have.
Thanks in advance!
Mark
|
|
|
|