|
| filsortering Fra : Viking-DK | Vist : 603 gange 20 point Dato : 05-11-06 20:11 |
|
jeg arbejder en del med programering af cnc programmer som består af almindelig tekst men der er mange programmer fra min forgængers tid og jeg kunne godt bruge et lille program der dunne lave en liste med programmets navn og hente noget tekst i selve programmet teksten står inde i en parantes og ud fra de to ting lave en liste er der nogen der ksn hjælpe mig med det ?
| |
| Accepteret svar Fra : BertelBrander | Modtaget 30 point Dato : 05-11-06 20:16 |
|
At liste filerne:
http://damb.dk/snip/adir.html
Derpå burde det være ret let at åbne filen, søge efter teksten og trække den ud & udskrive den sammen med filnavnet.
Har du en compiler?
Hvordan ser den tekst som du vil finde ud?
| |
| Godkendelse af svar Fra : Viking-DK |
Dato : 05-11-06 23:09 |
|
Tak for svaret BertelBrander.
Ja jeg har computer
teksten jeg gerne vil have ud ser sådan ud
%M P F2000 " Programstart "
(EMNENUMMER OPERATIONS NUMER OPS) " tekst jeg gerne vil have sat sammen med filnavn "
| |
|
Mener du compiler? Hvilken?
Er teksten én linie?
Står der altid Programstart?
Jeg prøver lige at strikke et eksempel sammen.
| |
|
Jeg lavede et eksempel:
Kode #include <dir.h>
#include <stdlib.h>
#include <stdio.h>
#include <io.h>
#include <string.h>
#include <time.h>
#include <locale.h>
#include <string>
#include <iostream>
#include <fstream>
bool FindText(const char* aFileName, std::string& aText)
{
std::ifstream File(aFileName);
if(!File)
{
return false;
}
std::string Line;
while(std::getline(File, Line))
{
std::string::size_type Pos;
if((Pos = Line.find("Programstart")) != std::string::npos)
{
std::string::size_type BrPos;
if((BrPos = Line.find(')', Pos)) != std::string::npos)
{
aText = Line.substr(BrPos + 1);
return true;
}
if(std::getline(File, Line) && (BrPos = Line.find(')', Pos)) != std::string::npos)
{
aText = Line.substr(BrPos + 1);
return true;
}
return false;
}
}
return false;
}
void Trim(std::string& aStr)
{
std::string::size_type pos = aStr.find_first_not_of("\" ");
if(pos != std::string::npos)
{
aStr = aStr.substr(pos);
}
pos = aStr.find_last_not_of("\" \0");
if(pos != std::string::npos)
{
aStr = aStr.substr(0, pos + 1);
}
}
void scan(char *dir, const char *pattern, int sub, std::ostream& aOut)
{
struct _finddata_t fileinfo;
long handle;
char temp[1024];
/* First parse any files in this directory */
sprintf(temp, "%s\\%s", dir, pattern);
handle = _findfirst(temp, &fileinfo);
if(handle != -1)
{
do
{
if(!(fileinfo.attrib & _A_SUBDIR))
{
std::string FullPath = dir;
FullPath += "\\";
FullPath = fileinfo.name;
std::string Temp;
if(FindText(FullPath.c_str(), Temp))
{
Trim(Temp);
aOut << FullPath << ", " << Temp << std::endl;
}
else
{
aOut << FullPath << ", did not find the text" << std::endl;
}
}
}
while(_findnext(handle, &fileinfo) == 0);
_findclose(handle);
}
if(sub)
{
/* Then parse all sub directories */
sprintf(temp, "%s\\*.*", dir);
handle = _findfirst(temp, &fileinfo);
if(handle != -1)
{
do
{
if((fileinfo.attrib & _A_SUBDIR) && strcmp(fileinfo.name, ".") && strcmp(fileinfo.name, ".."))
{
char sub[1024];
sprintf(sub, "%s\\%s", dir, fileinfo.name);
scan(sub, pattern, 1, aOut);
}
}
while(_findnext(handle, &fileinfo) == 0);
_findclose(handle);
}
}
}
void usage(const char *ProgramName)
{
fprintf(stderr, "Usage: %s [-s] [-fformat] [pattern1 [pattern2 [...]]]n", ProgramName);
fprintf(stderr, " -s Scan thru subdirectoriesn");
fprintf(stderr, " pattern e.g. *.* *.jpg adir.*n");
exit(EXIT_FAILURE);
}
int main(int argc, char *argv[])
{
char Dir[1024];
int i, DoSub = 0, FoundPattern = 0;
std::string OutName;
getcwd(Dir, sizeof(Dir));
setlocale(LC_ALL, "");
for(i = 1; i < argc; i++)
{
if(argv[i][0] == '-')
{
switch(argv[i][1])
{
case 's':
DoSub = 1;
argv[i][0] = 0;
break;
case 'o':
OutName = &argv[i][2];
break;
default:
fprintf(stderr, "Unknown switch: %sn", argv[i]);
/* No break; */
case 'h':
usage(argv[0]);
break;
}
}
}
std::ostream* OutStream = &std::cout;
if(!OutName.empty())
{
OutStream = new std::ofstream(OutName.c_str());
}
for(i = 1; i < argc; i++)
{
if(argv[i][0])
{
scan(Dir, argv[i], DoSub, *OutStream);
FoundPattern = 1;
}
}
if(!FoundPattern)
scan(Dir, "*.*", DoSub, *OutStream);
if(!OutName.empty())
delete OutStream;
return EXIT_SUCCESS;
} |
Jeg gik ud fra at du kører windows.
| |
| Du har følgende muligheder | |
|
Eftersom du ikke er logget ind i systemet, kan du ikke skrive et indlæg til dette spørgsmål.
Hvis du ikke allerede er registreret, kan du gratis blive medlem, ved at trykke på "Bliv medlem" ude i menuen.
| |
|
|