Προς το περιεχόμενο

Αντικατάσταση διακοπτόμενων συμβολοσειρών απο άλλες


Lomar

Προτεινόμενες αναρτήσεις

>#include <stdio.h>
#include <string.h>
#include <malloc.h>

void ReadLine(char *, FILE *);

int main()
{
int i=0,flag=0;
char name[40],name2[40];
char *buff = (char *)malloc(10000);
char *s;

FILE *ar, *dio;
printf ("\n\n Dwse to onoma tou arxeiou: ");
scanf ("%s",name);
ar=fopen(name,"r");
strcpy(name2,name);
strcat(name2,"-new.txt");
dio=fopen(name2,"w");
while (!feof(ar))
{
	ReadLine(buff,ar);
	if (strstr(buff,"\\Documents and Settings\\Lomar\\Τα έγγραφά μου\\"))
	{
		s = buff + 42;
		*s = 'D'; *(s+1) = ':'; *(s+2) = '\\';
		fprintf (dio,"%s%c",s,'\n');
	}
	else
	{
		fprintf (dio,"%s",buff);
		fprintf(dio,"%c",'\n');
	}
}
free(buff);
fclose (ar);
fclose (dio);
return 0;
}

void ReadLine(char *Temp, FILE *fp)
{
char ch; int i=0;
while ((ch=fgetc(fp))!=-1 && ch!='\n')
{
	*(Temp+i) = ch; i++;
}
*(Temp+i)=0;
}

 

Είναι λίγο διαφορετικό από το αρχικό σου κώδικα μιας και ήταν λογικά λάθος (δεν έκανε αυτό που έπρεπε να κάνει). Πρόσεχέ το λίγο γιατί έχει γραφτεί κάπως απότομα ...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 33
  • Δημ.
  • Τελ. απάντηση

Θέλω σε ένα αρχείο κειμένου και .txt να αντικαταστήσω συγκεκριμένα σημεία του με κάποια άλλη συμβολοσειρά.

 

Όχι ότι και οι λύσεις που βρέθηκαν έως τώρα είναι άσχημες, αλλά τείνουν σε τεχνικές πιο "αγνού και παραδοσιακού προγραμματισμού" (σαν το σπιτικό ψωμί):-D. Ο πιο απλός και σύγχρονος τρόπος είναι να χρησιμοποιήσεις Regular Expressions.

 

Δυστυχώς δεν γνωρίζω ακριβώς τι παίζει με τους compilers, αλλα πιθανώς στην VC++ να υπάρχουν ήδη τα πακέτα, ενώ στον GCC βρήκα κάποια extra βιβλιοθήκη που κάνει τέτοιες λειτουργίες.

 

Εδώ μπορείς να δεις κάποιες συγκρίσεις ταχύτητας ανάμεσα σε 2 διαφορετικές βιβλιοθήκες για regex (boost και gnu), μπορείς να επιλέξεις όποια θες, και να ακολουθήσεις τις οδηγίες εγκατάστασης και χρήσης σε κάθε περίπτωση

http://boost.org/libs/regex/doc/gcc-performance.html

 

Εδώ υπάρχει ένα παράδειγμα που χρησιμοποιεί regex από την βιβλιοθήκη boost.

http://www.rosettacode.org/wiki/Regular_expression_matching

 

Ελπίζω να μην σε μπέρδεψα, ένα από τα κουσούρια του G++ (GCC) είναι μερικά από τα θεωρούμενα καλά χαρακτηριστικά να απουσιάζουν. Σε αντίθεση η MS παρέχει πολλά χαρακτηριστικά έτοιμα. αλλά βέβαια στην μία περίπτωση ορίζεις από μόνος σου τι θες να χρησιμοποιήσεις ενώ στην δεύτερη περίπτωση αγοράζεις μια έτοιμη "λύση" με μια τάδε υποστήριξη.

 

Η χρήση επιπλέον βιβλιοθηκών είναι standard θέμα στον προγραμματισμό, εάν όμως έχεις αρκετή πείρα τα κάνεις όλα με κλειστά μάτια.:)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Κι εγώ είμαι λάτρης του σύγχρονου προγραμματισμού και πολλές φορές φορές οι νέες αυτές έννοεις κυριολεκτικά κάνουν θαύματα!

Παρόλ' αυτά όμως νομίζω πως ο φίλος μας ο Lomar δεν είχε τίποτα από αυτά στο μυαλό του μιας και φαίνεται πως τώρα μαθαίνει προγραμματισμό σε C.

Εξάλλου δεν είναι αναγκαία χρήση Regex. Μία String.Replace(string a, string B); την κάνει μια χαρά τη δουλειά της ;)

 

Φιλικά πάντα :)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

χαχαχαχαχαχαχα!!!! όλο αυτό γίνεται με ένα header file και φυσικά την κλήση της ανάλογης συνάρτησης, αλλά ήθελα να πειραματιστώ μόνος και στην τελική να φτιάξω αν τα καταφέρω θα το κάνω header file και θα το ανεβάσω σαν ανοιχτό κώδικα :mrgreen:

 

Ευχαριστώ πολύ για τον χρόνο, τον κόπο, την κατανόηση και την υπομονή σας. Θα πειραματιστώ και με τις "ετοιματζίδικες" λύσεις και με το παράδειγμα σου bookysmell2004.

 

@cocoflop

 

θα τα ψάξω λίγο αυτά που μου έδωσες και θα ελπίζω να εμπνευστώ κάτι καλό!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σε CodeGear Turbo C++ Explorer, με την βοήθεια της RAD βιβλιοθήκης VCL του πακέτου (στην οποία βασίζεται και η Delphi για όσους ασχολούνται..) θα μπορούσε να γίνει κάπως έτσι:

 

>
/*
* Find and Replace Text from file example written in CodeGear Turbo C++ 
* using the VCL library and C++.
*
* By Directx.
*/

#include <vcl.h>
#include <classes.hpp>
#include <strutils.hpp>
#include <iostream>
#pragma hdrstop

//---------------------------------------------------------------------------
using namespace std;

#pragma argsused
int main(int argc, char* argv[])
{
TStringList	*strlistBuffer = NULL;
int	nSuccess = 0;

try
 {
	try
	 {
		cout<<"Find&Replace Text from file example Demo by Directx"<<endl<<endl;
		
		// Parameters validation (argv[1] = source, argv[2] = find-what, argv[3] = replace)
		if(!ParamCount())
			throw Exception(" Usage: FRT file-name text-to-find replace-with-text");
		if(ParamCount()!=3)
			throw Exception(" Bad parameter count!");

		// Load file into VCL TStringList container
		strlistBuffer = new TStringList();			
		strlistBuffer->LoadFromFile(ParamStr(1));

		// Replace argv[2] with argv[3] -case insensitive!!			
		strlistBuffer->Text = AnsiReplaceText(strlistBuffer->Text,
											  ParamStr(2),
											  ParamStr(3));

		// Save new file as .rep
		strlistBuffer->SaveToFile(ParamStr(1)+".rep");

		// Tell about!
		cout<<" New file version on \""<<((AnsiString)(ParamStr(1)+".rep")).c_str()<<"\""<<endl;
	 }
	catch(Exception &Error)
	 {
		// Exception!
		nSuccess = -1;
		cout<<Error.Message.c_str()<<std::endl;
	 }
 }
__finally
 {
	// Delete local resources
	delete strlistBuffer;
 }

return nSuccess;
}
//---------------------------------------------------------------------------

 

Το αρχείο εισόδου, έστω “TEST.TXT” μπορεί να είναι:

>
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3

 

Με εντολή FRT test.txt "\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\" "D:\\"

 

..η έξοδος στο “TEST.TXT.REP”:

>
D:\\ABC.MP3
D:\\
D:\\ABC.MP3
D:\\
D:\\ABC.MP3
D:\\
D:\\ABC.MP3

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ευχαριστώ πολύ για τον χρόνο, τον κόπο, την κατανόηση και την υπομονή σας. Θα πειραματιστώ και με τις "ετοιματζίδικες" λύσεις και με το παράδειγμα σου bookysmell2004.

 

Δεν είναι και άσχημη η σκέψη σου, διότι αξίζει μια φορά έστω να "ψαχτείς" και να εξερευνήσεις κάτι, σε άλλη περίπτωση μπορείς να χρησιμοποιήσεις κάτι πολύ συγκεκριμένο από μια βιβλιοθήκη ώστε να την φέρεις στα μέτρα σου. Συνήθως οι έτοιμες λύσεις χρησιμεύουν όταν δεν υπάρχει διαθέσιμος χρόνος (είτε λόγω deadline είτε βαρεμάρας) αλλά εάν προστεθούν 10 βιβλιοθήκες μαζί σε μια εργασία τότε τα credits θα πέφτουν βροχή, με προοπτική starwars.:-D

 

@DirectX

Ωραίος, αυτά τα μικρά παραδειγματάκια σώζουν, danke!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

... αλλά εάν προστεθούν 10 βιβλιοθήκες μαζί σε μια εργασία τότε τα credits θα πέφτουν βροχή, με προοπτική starwars.:-D

 

χαχαχαχα τα έσπασε!!!

 

@DirectX man, ευχαριστώ πολύ, αλλά θέλω να το κάνω χωρίς "έτοιμες" συναρτήσεις... :D

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Οκ, απλά θέλει αρκετή προσπάθεια σε καθαρή C.

 

Για την ιστορία, ακολουθεί ο ανάλογος κώδικας γραμμένος σε C++ STL (με CodeGear Turbo C++):

 

>
//-Find&Replace text in file example written in C++ STL by Directx-----------
#include <iostream>
#include <fstream>
#include <sstream>
#ifdef __BORLANDC__
#pragma hdrstop
#endif

//---------------------------------------------------------------------------
using namespace std;

#ifdef __BORLANDC__
#pragma argsused
#endif
int main(int argc, char* argv[])
{
ifstream		fStream;
stringstream    strBuilder;

try
 {
	cout<<"Find&Replace text in file example by Directx in C++ STL"<<endl<<endl;
	if(argc==1)
		throw string("Usage: filename text-to-find replace-with-text");
	if(argc!=4)
		throw string("Invalid parameter count!");

	// Convert C char to C++ string
	string	strFile = argv[1],
			strTextToFind = argv[2],
			strTextReplaceWith = argv[3];

	// Open file for read
	fStream.open(argv[1],ios::in);
	if(!fStream.is_open())      
	 {
		strBuilder<<"Cannot open file for read - \""<<argv[1]<<"\"";
		throw strBuilder.str();
	 }			

	// Read file data into strBuilder
	strBuilder<<fStream.rdbuf();
	// Close file
	fStream.close();
	// Make strBuilder a simple C++ string
	string	strBuffer=strBuilder.str();

	// Find every strTextToFind and replace it with strTextReplaceWith ...
	int	nTextPosition;
	
	while((nTextPosition=strBuffer.find(strTextToFind,0))!=string::npos)		 
		strBuffer.replace(nTextPosition,strTextToFind.length(),strTextReplaceWith);

	// Print results on stdout..
	cout << strBuffer;
 }
catch(string strError)
 {
	cout<<" "<<strError<<endl;
 }

cout<<endl<<"Press Enter to quit..";
cin.get();	
return 0;
}
//---------------------------------------------------------------------------

 

Είσοδος:

>
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\ABC.MP3

 

Εντολή: test.txt ABC DEF

 

Έξοδος:

>
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\DEF.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\DEF.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\DEF.MP3
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\
\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\DEF.MP3

 

Οι φανατικοί της C++ STL ας μου συγχωρήσουν τα όποια λάθει καθώς δεν ασχολούμαι ιδιαίτερα με την εν λόγο βιβλιοθήκη ελέω VCL...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Και μια εκδοχή της ρουτίνας σε ANSI-C, υλοποιημένη σε CodeGear Turbo C++

 

>
/*-Find&Replace String in C example by Directx-------------------------------*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef	__BORLANDC__
#pragma hdrstop
#endif
/*---------------------------------------------------------------------------*/
#ifdef	__BORLANDC__
#pragma argsused
#endif

int main(int argc, char* argv[])
{
char	*pszBuffer = NULL,		
		*pszPos = NULL,
		*pszNewBuf = NULL;
long	lFileLen;	
int		nSuccess= 1, 
		nStrPosCount = 0, *nStrPosList = 0, nStrPosListLen = 0,
		nCopyIdx = 0, nNewBufCopyIdx = 0;
FILE	*Stream = NULL;

printf("Find&Replace Text from file example Demo in ANSI-C by Directx\n\n");
if(argc!=4)
 {
	printf(" Usage: file text-to-find replace-with\n");
	return -1;
 }			

/*
 * Attempt to load argv[1] file into pszBuffer!
 */
if((Stream=fopen(argv[1],"rb"))!=NULL)
 {
	if(fseek(Stream,0,SEEK_END))
		printf(" Seek to EOF failed - %s\n",argv[1]);
	else
	 {
		if((lFileLen=ftell(Stream))==-1L)
			printf(" Cannot find file length - %s\n",argv[1]);
		else
		 {
			if((pszBuffer=(char*)calloc(lFileLen+1,sizeof(char)))==NULL)
				printf(" Not enough memory to load file - %s\n",argv[1]);				
			else
			 {
				/*
				 * Read file to buffer
				 */
				rewind(Stream);					
				fread(pszBuffer,lFileLen+1,1,Stream);

				/*
				 * Replace argv[2] with argv[3] in pszBuffer..
				 *
				 * Locate string for repalce..
				 */	
				lFileLen = strlen(pszBuffer);
				while((pszPos=strstr(pszBuffer,argv[2]))!=NULL)
				 {
					static int nBegin,
							   nEnd;								   
		
					/*
					 * Find substring Begin position and End position in buffer.. 						
					 */
					nBegin = pszPos-pszBuffer;
					nEnd = nBegin+strlen(argv[2]);

					/*
					 * Save string-to-replace pszBuffer offset.
					 */
					nStrPosList=(int*)realloc(nStrPosList,
											  sizeof(unsigned long)*++nStrPosListLen);						
					if(nStrPosList==NULL)
					 {
                           nSuccess = 0;
						printf(" Memory error #1!\n");
						break;
					 }
					nStrPosList[nStrPosListLen-1] = nBegin;
					
					/*
					 * Remove obsolute string from pszBuffer.
					 */
					memmove(&pszBuffer[nBegin],&pszBuffer[nEnd],strlen(pszBuffer)-nEnd);								
					pszBuffer[lFileLen-=(nEnd-nBegin)] = 0;
				 }	

				/*
				 * Store final pszBuffer length.
				 */
				lFileLen = strlen(pszBuffer);

				/*
				 * Now replace string with new string
				 */
				for(nCopyIdx=0;nCopyIdx<lFileLen;nCopyIdx++)
				 {
					int nReplace = 0;
					
					pszNewBuf = realloc(pszNewBuf,sizeof(char)*(nNewBufCopyIdx+2));
					if(pszNewBuf==NULL)
					 {
						nSuccess = 0;
						printf(" Memory error #2!\n");
						break;
					 }
										
					for(nStrPosCount=0;nStrPosCount<nStrPosListLen;nStrPosCount++)
						if(nStrPosList[nStrPosCount]==nCopyIdx)
						 {
							nReplace = 1; 
							break;
						 }	

					if(!nReplace)
					 {
						pszNewBuf[nNewBufCopyIdx++] = pszBuffer[nCopyIdx];
						pszNewBuf[nNewBufCopyIdx] = '\0';
					 }
					else
					 {							
						/*
						 * Special case - string-to-replace is on top of pszBuffer!
						 */
						if(!nNewBufCopyIdx)
						 {
							pszNewBuf = realloc(pszNewBuf,sizeof(char)*(nNewBufCopyIdx+2));
							pszNewBuf[nNewBufCopyIdx] = '\0';								
						 }
						 
						pszNewBuf = realloc(pszNewBuf,sizeof(char)*(nNewBufCopyIdx+strlen(argv[3])+1));
						if(pszNewBuf==NULL)
						 {
							nSuccess = 0;
							printf(" Memory error #3!\n");
							break;								
						 }
						strcat(pszNewBuf,argv[3]);							
						nNewBufCopyIdx+=strlen(argv[3]);

						nStrPosList[nStrPosCount] = -1;
						nCopyIdx--;							
					 }
				 }

				/*
				 * Return result in stdout.
				 */
				if(nSuccess)
					printf("%s",pszNewBuf);
			 }
		 }
	 }

	/*
	 * Close streams.
	 */
	fclose(Stream);	

	/*
	 * Free memory
	 */	
	free(pszBuffer);
	free(nStrPosList);
	free(pszNewBuf);
 }
else
	printf(" File not found - %s\n",argv[1]);

printf("\n\nPress Enter to quit..");
getch();
return 0;
}
/*---------------------------------------------------------------------------*/

 

ΕΙΣΟΔΟΣ:

>
\Documents and Settings\Lomar\ABC.MP3
\Documents and Settings\Lomar\
\Documents and Settings\Lomar\ABC.MP3
\Documents and Settings\Lomar\
\Documents and Settings\Lomar\ABC.MP3
\Documents and Settings\Lomar\
\Documents and Settings\Lomar\ABC.MP3

 

ΕΝΤΟΛΗ: test.txt "\Documents and Settings\Lomar" D:

 

ΕΞΟΔΟΣ:

>
D:\ABC.MP3
D:\
D:\ABC.MP3
D:\
D:\ABC.MP3
D:\
D:\ABC.MP3

 

Τι κάνει;

Φορτώνει ένα αρχείο στην μνήμη (pszBuffer), εντοπίζει με την βοήθεια της strstr την αρχή του προς αντικατάσταση κειμένου, αποθηκεύει σε μια int array (nStrPosList) την θέση αυτού του κειμένου, και ύστερα το διαγράφει από το pszBuffer.

Αυτή η διαδικασία ακολουθείται μέχρι να μην υπάρχει άλλο προς αντικατάσταση κείμενο στο pszBuffer.

 

Ύστερα, αντιγράφει byte προς Byte το pszBuffer σε ένα νέο μπλοκ μνήμης (pszNewBuf), όταν εντοπίζει θέση (εξετάζοντας την int array nStrPosList) που υπήρχε το προς αντικατάσταση κείμενο, τότε απλά αντί του pszBuffer byte προσθέτει το νέο κείμενο που επιθυμούμε εμείς (argv[3]).

 

Σαν υλοποίηση δεν λέει και πολλά πράγματα, διότι χρησιμοποιεί 3 μπλοκ μνήμης, αν κάποιος αφιερώσει λίγο παραπάνω χρόνο, μπορεί να κάνει όλες τις αλλαγές στο ίδιο μπλοκ μνήμης δίχως χρήση βοηθητικών memory blocks και list/arrays.

 

Φυσικά ο κώδικας μπορεί να περιέχει bugs..

 

Και από τις 3 υλοποιήσεις εξακολουθώ να θεωρώ εκείνη της VCL μακράν ευκολότερη :D

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φοβερό! μέσα στο σαββατοκύριακο θα του κάνω την μελέτη και τους πειραματισμούς που του αξίζει!!!

 

Να σου κάνω όμως και μια διευκρινιστική ερώτηση.

 

>
#ifdef    __BORLANDC__
   #pragma hdrstop
#endif
/*---------------------------------------------------------------------------*/
#ifdef    __BORLANDC__
   #pragma argsused
#endif 

 

Οι παραπάνω εντολές στον προεπεξεργαστή της C, τι ακριβώς κάνουν;

 

Το σκηνικό με το #pragma το έχω δει σε πολλά προγράμματα, αλλά δεν κατάλαβα σε τι ακριβώς εξυπηρετεί.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η πρώτη εντολή (ή #pragma) “hdrstop” (δηλαδή header stop, σε άλλους μεταφραστές ονομάζεται “hdr_stop” κτλ..) δηλώνει στον compiler, που τελειώνουν τα header που μπορεί να κάνει ή να χρησιμοποιήσει ως pre-compiled ώστε να επιταχύνει το συνολικό compiling μεταξύ των builds.

 

Η δεύτερη εντολή, “argsused” προηγείται των δηλωμένων functions (πχ. main) και έχει σαν σκοπό να αποκρύπτει το warning του compiler πως μια παράμετρος (πχ. η argv) δεν χρησιμοποιείται πότε από τον κώδικα της ρουτίνας μας (στην περίπτωση μας, το πρόγραμμα που ακολουθεί της main).

 

Η C-preprocessor συνθήκη “#ifdef __BORLANDC__ … και #endif” εξασφαλίζει πως τα συγκεκριμένα pragma θα συμπεριληφθούν στο compile μόνο σε περίπτωση που υπάρχει CodeGear/Borland C++ Compiler (το __BORLANDC__ define είναι πάντα defined στους CodeGear/Borland compilers) ώστε να εξασφαλισθεί η συμβατότητα και με άλλους μεταφραστές που δεν γνωρίζουν κάποιο από αυτά τα pragma.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

@Directx

 

Το έκανα compile και όταν τρέχει δεν κάνει την μετατροπή που πρέπει στο αρχείο.

 

Το τρέχω στο ms-dos, με τα εξής arguments: C:\\a.exe fightc.txt "\Documents and Settings\Lomar" "D:\\"

 

a.exe ονόμασα το εκτελέσιμο το οποίο το έχω στο C χύμα. Επίσης το αρχείο fightc.txt είναι στον ίδιο φάκελο.

 

Τρέχει κανονικά το πρόγραμμα και μου εμφανίζει τα περιεχόμενα του αρχείου, αλλά δεν τα αλλάζει...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Να έχεις υπόψη σου ότι ο κώδικας κάνει αναζήτηση case-sensitive, αν θες στείλε μου το περιεχόμενο του fightc.txt ώστε να το κοιτάξω καλύτερα καθώς μπορεί να υπάρχει κάποιο bug που σε απλά τεστ δεν φαίνεται :)

 

Υ.Γ.

Αν μιλάς κυριολεκτικά για MS-DOS, δηλαδή έκανες το πρόγραμμα compile σε 16bit compiler, τότε φρόντισε αλλάξεις κάθε int σε long καθώς για τους 16bit compiler το int έχει μέγεθος 2byte σε αντίθεση με τους 32bit που το ορίζουν όσο και το long, δηλαδή στα 4byte!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

#EXTM3U

#EXTINF:101,The Dust Brothers by Apollwnas - Fight With Lou

\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\Fight_Club_OST__Special_Edition\Fight Club OST [special Edition]_partI\26 - Fight With Lou.mp3

#EXTINF:133,The Dust Brothers by Apollwnas - Setting Up A Fight

\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\Fight_Club_OST__Special_Edition\Fight Club OST [special Edition]_partI\28 - Setting Up A Fight.mp3

#EXTINF:215,The Dust Brothers by Apollwnas - Chemical Burn (Extended)

\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\Fight_Club_OST__Special_Edition\Fight Club OST [special Edition]_partI\22 - Chemical Burn (Extended).mp3

#EXTINF:64,The Dust Brothers by Apollwnas - Stealing Fat

\Documents and Settings\Lomar\Τα έγγραφά μου\Η μουσική μου\Fight_Club_OST__Special_Edition\Fight Club OST [special Edition]_partI\20 - Stealing Fat.mp3

 

 

Βασικά το έκανα compile με τον Dev-C++ και δεν ήξερα με πως αλλιώς να κάνω εισαγωγή στα arguments... έτσι το έτρεξα απο το dos.

 

Αν θέλεις πές μου πως μέσα τα windows τρέχω προγράμματα με arguments.

 

Άσε φίλε, και έχουν σπάσει τα νεύρα μου με τους compliler! Σε ενα παιδί σε αυτό το thread δεν έβγαζε τόσα error όσα και του δικού μου. Δηλαδή ο κάθε compiler έχει και τις ιδιαιτερότητές του.

 

Τώρα αν το έκανα compile για 16bit δεν νομίζω. Το αποθήκευσα σαν .c πρόγραμμα και δεν άλλαξα κάποια άλλη επιλογή του.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Φίλε Loram, εκτέλεσα το πρόγραμμα με το αρχείο εισόδου σου στην Windows XP console, δεν παρατήρησα κάποιο πρόβλημα στην αντικατάσταση των στοιχείων.

 

Παράμετροι: fightc.txt "\Documents and Settings\Lomar" D:

 

Ακολουθεί Screen-shot:

mnz0lnkfowwbqmzjmkmm.png

 

Για να ανοίξεις γρήγορα την Windows XP console, δώσε cmd στο Start->Run ..

 

 

Υ.Γ.

Μια μικρή λεπτομέρεια, έχω ενεργοποιήσει τα ελληνικά στην Windows XP Console όπως έχω υποδείξει σε παλαιότερο post επί του θέματος, με chcp 1253 και console font την γραμματοσειρά “Lucida Console”

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.


  • Δημιουργία νέου...