Olá, vou tentar me apresentar um pouco e assim vocês podem me conhecer melhor. Sou estudante da terceira fase de CdC e ultimamente venho me perguntando se fiz a escolha certa, já que até então tudo parece complicado de fazer sozinho (programação) e parece que não tenho a motivação necessária :/
Eu gosto de tecnologia, redes, matemática e programação no início eu mandava muito bem mas do nada perdi totalmente a vontade de ir atrás e programar soznho dependendo apenas de grupos...
Alguns dias atrás a professora de C++ fez um request de um projeto em dupla e assunto livre, ou seja, qualquer coisa desde que fosse em C++ e tivesse forms como ela diria ^_^ Então eu e um colega ficamos pensando e pensando e surgiu a idéia de realizar um Editor de Textos, ele fez tudo baseado em um tutorial e mudou a parte visual, muito bem até então, problema que eu não fiz nada por falha minha e acabei deixando de aprender algo interessante e me firmar nessa área de uma vez por todas.
A questão aqui é que eu quero fazer um projeto só meu e que tenha um fundamento legal, e foi ai que lembrei de um programa para linux que meu grande primo Karl fez, problema que só roda por terminal no linux(e obviamente não possui interface), e eu preciso que tenha uma janela com botões e que rode no windows...
Gostaria de esclarecer uma pequena coisa, não quero que vocês me entreguem qqlqr coisa pronta, apenas me ajudem de forma didática os caminhos para eu ter sucesso nesse trabalho e poder estufar o peito e dizer que eu fui atrás, pesquisei e com muita ajuda dos camaradas eu realizei uma coisa: um programa interessante e com a minha cara.
Para quem gostaria de ver o programa rodando, basta acessar http://sourceforge.net/projects/fpeek/ e baixar no seu linux para ver o funcionamento (livre de vírus, não esquenta o/ )
E para aqueles programadores fod*es aqui vai o código:
/*
Copyright (C) <2009> <Karl Phillip Buhr>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "fpeek.h"
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <iostream>
#include <algorithm>
bool _display_line_num = false;
int main(int argc, char **argv)
{
if (argc < 2)
{
std::cerr << "Usage: " << argv[0] << " <options> <file>\n" <<
"Try '" << argv[0]<< " --help' for more information." << std::endl;
return -1;
}
// Parse command line options
std::vector<std::string> args;
args = cmd_line_handle(argc, argv);
// Checking is file exists
char* filename = argv[argc-1];
std::ifstream file(filename);
if (!file.is_open())
{
std::cerr << filename << ": No such file" << std::endl;
exit(0);
}
// We do not print lines of binary files
char c = 0;
while (file)
{
file.get(c);
if (c < -96)
{
std::cerr << filename << ": Cannot open binary file" << std::endl;
exit(0);
}
}
file.close();
display_lines(filename, args);
return 0;
}
void cmd_line_help(char* invocation)
{
std::cerr << "Usage: "<< invocation <<" [options] <file>\n\n" <<
"Options:\n" <<
" -d, Print line numbers before the result.\n" <<
" -l, --line N Print line N from file. Multiple lines must be separated by the symbol ','.\n" <<
" -r, --range N-M Print range of lines from N to M. Must be separated by '-'.\n" <<
" You can also use ',' when working with multiple ranges.\n" <<
" -h Display this message\n" <<
"\n" <<
"You can visit fpeek homepage at: https://sourceforge.net/projects/fpeek/\n" << std::endl;
exit(0);
return;
}
std::vector<std::string> cmd_line_handle(int argc, char **argv)
{
std::vector<std::string> args;
for(int i=1; i<argc; i++)
{
if (argv[i][0] != '-') continue;
if (!strcmp(argv[i], "--help") ||
!strcmp(argv[i], "-help" ) ||
!strcmp(argv[i], "-h" ))
{
cmd_line_help(argv[0]);
return args;
}
else if(!strcmp(argv[i], "-d"))
{
_display_line_num = true;
}
else if( (!strcmp(argv[i], "-l") || !strcmp(argv[i], "--line") ) && i+1 < argc)
{
args.push_back(argv[i+1]);
i++;
}
else if( (!strcmp(argv[i], "-r") || !strcmp(argv[i], "--range") ) && i+1 < argc)
{
args.push_back(argv[i+1]);
i++;
}
else
{
std::cerr << "Invalid parameter: " << argv[i] << ".\n" << std::endl;
cmd_line_help(argv[0]);
return args;
}
}
if (args.size() == 0)
cmd_line_help(argv[0]);
return args;
}
void display_lines(char* filename, std::vector<std::string> args)
{
std::vector<int> line_vec;
if (args.size() > 0)
{
for (size_t i = 0; i < args.size(); i++)
{
// Parse single lines
char* token = strtok(const_cast<char *>(args.at(i).c_str()), "," );
while (token != NULL)
{
line_vec.push_back(atoi(token));
token = strtok(NULL, ",");
}
}
for (size_t i = 0; i < args.size(); i++)
{
// Parse range of lines
int range_beg = 0;
int range_end = 0;
char* token = strtok(const_cast<char *>(args.at(i).c_str()), "-" );
while (token != NULL)
{
if (!range_beg)
range_beg = atoi(token);
else
range_end = atoi(token);
token = strtok(NULL, ",");
}
for (int i = range_beg; i <= range_end; i++)
line_vec.push_back(i);
}
}
// Magic: search through file and display lines
std::ifstream file(filename);
std::string line;
int pos = 1;
while (std::getline(file, line))
{
// Find if current line should be displayed
std::vector<int>::iterator iter = std::find(line_vec.begin(), line_vec.end(), pos);
if (*iter == pos)
{
if (_display_line_num) // If -d was requested, should print the line number too
{
std::cout << pos << ": ";
}
std::cout << line << std::endl;
}
pos++;
}
return;
}
e aqui a header:
/*
Copyright (C) <2009> <Karl Phillip Buhr>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <vector>
#include <string>
void cmd_line_help(char* invocation);
std::vector<std::string> cmd_line_handle(int argc, char **argv);
void display_lines(char* filename, std::vector<std::string> args);
Ficarei MUITO grato por qualquer ajuda, estou um tanto perdido e preciso definir logo se consigo ser um bom programador/seguir as dicas corretamente. E claro que entenderei se não foi muito possível "converter" esse programa
Pergunta
D0cz
Olá, vou tentar me apresentar um pouco e assim vocês podem me conhecer melhor. Sou estudante da terceira fase de CdC e ultimamente venho me perguntando se fiz a escolha certa, já que até então tudo parece complicado de fazer sozinho (programação) e parece que não tenho a motivação necessária :/
Eu gosto de tecnologia, redes, matemática e programação no início eu mandava muito bem mas do nada perdi totalmente a vontade de ir atrás e programar soznho dependendo apenas de grupos...
Alguns dias atrás a professora de C++ fez um request de um projeto em dupla e assunto livre, ou seja, qualquer coisa desde que fosse em C++ e tivesse forms como ela diria ^_^ Então eu e um colega ficamos pensando e pensando e surgiu a idéia de realizar um Editor de Textos, ele fez tudo baseado em um tutorial e mudou a parte visual, muito bem até então, problema que eu não fiz nada por falha minha e acabei deixando de aprender algo interessante e me firmar nessa área de uma vez por todas.
A questão aqui é que eu quero fazer um projeto só meu e que tenha um fundamento legal, e foi ai que lembrei de um programa para linux que meu grande primo Karl fez, problema que só roda por terminal no linux(e obviamente não possui interface), e eu preciso que tenha uma janela com botões e que rode no windows...
Gostaria de esclarecer uma pequena coisa, não quero que vocês me entreguem qqlqr coisa pronta, apenas me ajudem de forma didática os caminhos para eu ter sucesso nesse trabalho e poder estufar o peito e dizer que eu fui atrás, pesquisei e com muita ajuda dos camaradas eu realizei uma coisa: um programa interessante e com a minha cara.
Para quem gostaria de ver o programa rodando, basta acessar http://sourceforge.net/projects/fpeek/ e baixar no seu linux para ver o funcionamento (livre de vírus, não esquenta o/ )
E para aqueles programadores fod*es aqui vai o código:
e aqui a header:Ficarei MUITO grato por qualquer ajuda, estou um tanto perdido e preciso definir logo se consigo ser um bom programador/seguir as dicas corretamente. E claro que entenderei se não foi muito possível "converter" esse programa
Bruno.
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.