/ Forside/ Teknologi / Udvikling / C/C++ / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
Bech_bb 500
kyllekylle 500
jdjespers.. 500
gibson 300
scootergr.. 300
molokyle 287
10  strarup 270
filsortering
Fra : Viking-DK
Vist : 566 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 "



Kommentar
Fra : BertelBrander


Dato : 05-11-06 23:13

Citat
Ja jeg har computer

Mener du compiler? Hvilken?

Er teksten én linie?
Står der altid Programstart?

Jeg prøver lige at strikke et eksempel sammen.

Kommentar
Fra : BertelBrander


Dato : 06-11-06 00:35

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.
Søg
Reklame
Statistik
Spørgsmål : 177417
Tips : 31962
Nyheder : 719565
Indlæg : 6407870
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste