Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RayJunx JLI'ler
Alter: 43 Anmeldedatum: 16.01.2006 Beiträge: 130 Wohnort: Bayern Medaillen: Keine
|
Verfasst am: 13.06.2007, 14:42 Titel: Quellcode größe |
|
|
Hi!
kann mir jemand verraten wie ich in Microsoft Visual Studio 8 nachsehen kann wie viele Zeilen code mein aktives Projekt hat? Würde das spaßes halber gerne wissen. ^^ _________________ Just a Freak |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 13.06.2007, 15:19 Titel: |
|
|
Hab dafür mal ein kleines Konsolenprogramm geschrieben. Wenn du willst kann ich dir das mal uploaden. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 13.06.2007, 15:48 Titel: |
|
|
Wieso will man wissen wieviel Zeilen sein Code hat? :-S |
|
Nach oben |
|
|
Maxim Senior JLI'ler
Anmeldedatum: 28.03.2004 Beiträge: 249
Medaillen: Keine
|
Verfasst am: 13.06.2007, 16:12 Titel: |
|
|
damit man damit angeben kann und es mit so tollen programmen vergleichen kann stimmts?
auch programm xy hat gerade mal 30000 zeilen, ich habe in meinem programm auch schon 10000..... |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 13.06.2007, 16:19 Titel: |
|
|
wobei bei gleicher funktionalität kürzerer code meistens besser ist
naja taschenrechner -> alle dateien in VC öffnen -> bei jeder datei nach unten scrollen und zeilenzahl und + eintippen -> am ende ablesen XD _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 13.06.2007, 16:36 Titel: |
|
|
GreatFlo hat Folgendes geschrieben: | wobei bei gleicher funktionalität kürzerer code meistens besser ist
naja taschenrechner -> alle dateien in VC öffnen -> bei jeder datei nach unten scrollen und zeilenzahl und + eintippen -> am ende ablesen XD |
Viel zu umständlich. Hier ist mein Progrämmchen. Ist nicht ganz perfekt aber funktioniert einwandfrei. Hab's in ner langweiligen Vorlesung schnell geschrieben. Man tippt einfach in FileList.txt in jeder Zeile einen Dateinamen ein von einer Datei die man mitzählen will. Dann führt man das Programm aus, es rödelt ein bisschen rum und am Ende stehen da die Zeilen. Bei meinem größten Projekt sind's um die 26000 bei einer Dateigröße von 1MB . _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
|
Nach oben |
|
|
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 13.06.2007, 19:09 Titel: |
|
|
GreatFlo hat Folgendes geschrieben: | wobei bei gleicher funktionalität kürzerer code meistens besser ist |
Naja, ich wieß noch bei meinem ersten Programm war ich auch noch der Meinung. Das Resultat der Code war so zusammengeschrumpelt, dass man ihn beim zweitenmal durchlesen nicht mehr verstand und keine Change hatte ihn zu Verbessern oder Erweitern.
Lieber klar, strukturiert und übersichtlich schreiben und dafür halt mal ein paar Zeilen mehr verschwenden |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 13.06.2007, 19:10 Titel: |
|
|
Aha, zum Angeben. Nun, Anfänger vergessen halt das viel code nicht eqivalent für ein gutes Programm ist... Traurig egtl mit dem Codeumfang angeben zu müssen! |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 13.06.2007, 19:20 Titel: |
|
|
Otscho hat Folgendes geschrieben: | GreatFlo hat Folgendes geschrieben: | wobei bei gleicher funktionalität kürzerer code meistens besser ist |
Naja, ich wieß noch bei meinem ersten Programm war ich auch noch der Meinung. Das Resultat der Code war so zusammengeschrumpelt, dass man ihn beim zweitenmal durchlesen nicht mehr verstand und keine Change hatte ihn zu Verbessern oder Erweitern.
Lieber klar, strukturiert und übersichtlich schreiben und dafür halt mal ein paar Zeilen mehr verschwenden |
IMHO war damit gemeint, alles unkompliziert und einfach zu halten. Nicht komplizierte und unübersichtliche Megegebilde, sonder lieber kleine, durchdachte und feine Algorithmen usw. Diese sollten natürlich auch ausführlich kommentiert und leserlich formatiert sein. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.06.2007, 20:48 Titel: |
|
|
Ich wurde bei einem Einstellungsgespräch gefragt wieviel Zeilen Code meine Programme hatten/Was so die meisten Zeilen Code waren mit denen ich zu tun hatte (auf ein grösseres Projekt) bezogen.
Von daher hat dieses Wissen wohl doch eine gewisse Berechtigung. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
Asto JLI'ler
Alter: 37 Anmeldedatum: 30.05.2007 Beiträge: 114 Wohnort: Dortmund Medaillen: Keine
|
Verfasst am: 13.06.2007, 21:24 Titel: |
|
|
ja genau jonathan, so meinte ich das. das man dazu kommentare verfassen sollte und alles leserlich bzw so ist, das man es später noch versteht, setzte ich vorraus
Fallen: und du wusstest die antwort!? o.O
also ich müsste erstmal ordentlich grübeln. Okay, mit C++ fang ich grad an, aber wenn ich das jetzt bei meinen PHP-Sachen sagen sollte: Keine Ahnung. ^^
Ok ich könnte schätzen ^^ _________________ "A programmer started to cuss, Because getting to sleep was a fuss, As he lay there in bed, Looping 'round in his head, was: while(!asleep()) sheep++;", Unbekannt |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 13.06.2007, 21:52 Titel: |
|
|
GreatFlo hat Folgendes geschrieben: | Fallen: und du wusstest die antwort!? o.O |
Nö, sowas interessiert mich eigentlich nur am Rande, da ich aber darauf vorbereitet war konnte ich mir die nötigen Informationen besorgen. _________________ "I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse." |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 14.06.2007, 06:54 Titel: |
|
|
solche größen sieht man ja in der regel auch nur als grobe richtlinie.. es besteht nunmal ein unterschied zwischen 1.000 zeilen und 10.000 zeilen egal wie ordentlich man kommentiert .
genau vergleichen kann man sowas natürlich nicht. |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 14.06.2007, 09:09 Titel: |
|
|
[IRONIE]
CPP: | #include <iostream>
#include <fstream>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
namespace str_utils
{
std::string& trim( std::string& str, char delim = ' ' )
{
std::string::size_type pos = str.find_last_not_of( delim );
if( pos != std::string::npos )
{
str.erase( pos+1 );
pos = str.find_first_not_of( delim );
if ( pos != std::string::npos )
str.erase( 0, pos );
}
else
str.erase( str.begin(), str.end() );
return str;
}
}
namespace file_system
{
bool is_dir( const char* name )
{
struct stat status;
::stat( name, &status );
return status.st_mode & S_IFDIR;
}
class path
{
public:
path()
: value( "" )
{}
path( const std::string& path_ )
: value( path_ )
{
for ( std::string::iterator it( value.begin() ); it != value.end(); ++it )
{
if ( ( *it ) == '\\' )
( *it ) = '/';
}
}
path& operator+=( const std::string& lhs )
{
value += lhs;
return *this;
}
const std::string& get_full_path() const
{
return value;
}
std::string get_filename() const
{
return extract( '/', false );
}
std::string get_extension() const
{
return extract( '.', false );
}
std::string get_path() const
{
return extract( '/', true );
}
bool is_directory() const
{
return is_dir( value.c_str() );
}
private:
std::string extract( char delim, bool from_begin = true ) const
{
std::string::size_type pos = value.find_last_of( delim );
std::string result( "" );
if ( pos != std::string::npos && pos < value.length()-1 )
{
result = from_begin ? value.substr( 0, pos+1 ) : value.substr( pos+1 );
}
return result;
}
private:
std::string value;
};
class directory_iterator
{
public:
struct dir_search_error
: public std::exception
{
public:
dir_search_error() throw()
{}
~dir_search_error() throw()
{}
const char* what() const throw()
{
return "dir_search_exception: something failed";
}
};
public:
directory_iterator( const path& path_ )
: search_path( path_ )
, curr()
, directory( 0 )
, end_dir_flag( true )
{
++*this; // hm... stupid hack
}
~directory_iterator()
{
if ( directory )
::closedir( directory );
}
directory_iterator& operator++()
{
if ( !directory )
open_directory();
struct dirent *info;
if ( ( info = readdir( directory ) ) == 0 )
{
end_dir_flag = false;
return *this;
}
curr = search_path;
curr += info->d_name;
if ( ( curr.is_directory() ) &&
( strcmp( info->d_name, "." ) &&
strcmp( info->d_name, ".." ) ) )
{
curr += "/";
}
return *this;
}
bool operator!() const
{
return end_dir_flag;
}
const path* operator->() const
{
return &curr;
}
private:
void open_directory() throw ( dir_search_error )
{
if ( ( directory = ::opendir( search_path.get_full_path().c_str() ) ) == 0 )
{
throw dir_search_error();
}
end_dir_flag = true;
}
private:
path search_path;
path curr;
DIR* directory;
bool end_dir_flag;
};
}
class project_info
{
private:
std::size_t headers;
std::size_t codefiles;
std::size_t lines;
std::size_t characters;
private:
struct simple_parser
{
std::size_t lines;
std::size_t characters;
simple_parser()
: lines( 0 )
, characters( 0 )
{}
bool open( const std::string& name )
{
std::ifstream stream( name.c_str() );
if ( !stream )
return false;
std::string tmp;
bool comment_block = false;
lines = 0;
characters = 0;
while ( true )
{
std::getline( stream, tmp );
if ( stream.eof() )
break;
str_utils::trim( tmp, ' ' );
str_utils::trim( tmp, '\t' );
std::string::size_type pos, p1, p2;
if ( comment_block )
{
pos = tmp.find( "*/" );
if ( pos != std::string::npos )
{
if ( tmp.length() > 2 )
{
characters += tmp.length() - pos+2;
++lines;
}
comment_block = false;
}
continue;
}
pos = tmp.find( "//" );
if ( pos == std::string::npos )
pos = tmp.find( "/*" );
// Comments
if ( pos != std::string::npos )
{
// /* comment
comment_block = ( tmp[ pos+1 ] == '*' ) && !is_stringlit( tmp, pos );
if ( !is_stringlit( tmp, pos ) )
{
if ( pos > 0 )
{
characters += pos;
++lines;
}
continue;
}
}
++lines;
characters += tmp.length();
}
stream.close();
return true;
}
private:
bool is_stringlit( const std::string& str, std::string::size_type pos )
{
std::string::size_type p1, p2;
while ( true )
{
p1 = str.find_first_of( "\"" );
p2 = str.find( "\"", p1+1 );
if ( p1 == std::string::npos || p2 == std::string::npos )
break;
if ( ( pos > p1 && pos < p2 ) || pos == 0 )
return true;
}
return false;
}
};
public:
project_info()
: headers( 0 )
, codefiles( 0 )
, lines( 0 )
, characters( 0 )
{}
bool parse_files( const std::string& path_ )
{
using namespace file_system;
path base_path( path_ );
directory_iterator it( base_path );
simple_parser parser;
for ( ; !it; ++it )
{
if ( it->is_directory() )
{
std::string name = it->get_filename();
if ( name == "." || name == ".." )
continue;
return parse_files( it->get_full_path() );
}
else
{
std::string extension = it->get_extension();
if ( extension == "cpp" || extension == "c" || extension == "h" || extension == "hpp" )
{
headers = headers + ( extension == "h" || extension == "hpp" );
codefiles = codefiles + ( extension == "cpp" || extension == "c" );
if ( !parser.open( it->get_full_path() ) )
continue;
lines += parser.lines;
characters += parser.characters;
}
}
}
return true;
}
friend std::ostream& operator<<( std::ostream& out, const project_info& info )
{
return ( out << "Files: " << ( info.headers + info.codefiles ) << '\n'
<< "\tHeaders: " << info.headers << '\n'
<< "\tCode Files: " << info.codefiles << '\n'
<< "Lines: " << info.lines << '\n'
<< "Characters: " << info.characters );
}
};
int main()
{
project_info info;
if ( !info.parse_files( "/home/foobar/xyz/" ) )
{
std::cout << "Fehler, Projektinfo konnte nicht erstellt werden" << std::endl;
}
else
{
std::cout << info << std::endl;
}
}
|
Tataaa, mein Quellcode-Linien-Zähl-Programm. Keine Ahnung obs funktioniert, müsste aber halbwegs tun! Warn allerdings nur 20 min Arbeit und keine Testdurchläufe, insofern... Zu allem übel nutzt es teile der POSIX API und wird nicht unter Windows funktionieren.
ABER: Dafür zählt es Kommentare nicht mit (!!!). Wobei Zeilen mit "//" // nicht berücksichtigt werden, sry! ;-P
[IRONIE]
grüße |
|
Nach oben |
|
|
|