Psycho_Mind Posted February 12, 2013 at 11:17 PM Report #495048 Posted February 12, 2013 at 11:17 PM Boas. Tenho um programa que captura dos pacotes na rede, sendo criado um ficheiro .txt com os dados da captura efetuada. Como preciso de tratar as estatisticas dos dados a melhor forma (penso eu de que) passaria por passar os dados do ficheiro .txt para um .csv. o problema agora é saber qual a melhor forma de o fazer... Não sei como deveria de proceder para implementar um programa que permita fazer isto. Talvez o melhor seja adicionar "," (virgulas) entre os dados obtidos e guardar estes dados. Mas não estou a ver como o possa fazer... Guardar numa string ou assim.
pmg Posted February 12, 2013 at 11:27 PM Report #495049 Posted February 12, 2013 at 11:27 PM Podes fazer isso facilmente (é o chamado filtro Unix). Mas, dependendo do que queres fazer com os dados, talvez seja desnecessario: o Excel, por exemplo, interpreta tao bem um ficheiro CSV como um ficheiro TXT de fixed width. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Psycho_Mind Posted February 12, 2013 at 11:35 PM Author Report #495051 Posted February 12, 2013 at 11:35 PM Podes fazer isso facilmente (é o chamado filtro Unix). Mas, dependendo do que queres fazer com os dados, talvez seja desnecessario: o Excel, por exemplo, interpreta tao bem um ficheiro CSV como um ficheiro TXT de fixed width. Vários tipos de estatisticas sobre os pacotes capturados e pensei que um ficheiro .csv pudesse ser uma forma mais simples para o fazer, mas tendo em conta que tenho o programa a criar um .txt com os dados tenho de ter forma de os ter num .csv
pmg Posted February 13, 2013 at 12:20 AM Report #495055 Posted February 13, 2013 at 12:20 AM (edited) Se o ficheiro origem for "fixed width" a forma mais pratica, a meu ver, é ir passando bytes do source para o destino, acrescentando a virgula (e aspas), onde necessario: FILE *src = fopen("origem.txt", "r"); FILE *dst = fopen("destino.csv", "w"); int count = 0; int ch; while ((ch = fgetc(src)) != EOF) { count += 1; if (count == 5) fputc(',', dst); // acrescenta virgula if (count == 8) fputc(',', dst); if (count == 13) fputc(',', dst); if (count == 16) fputc(',', dst); if (count == 42) fputc(',', dst); if (count == 63) count = 0; // outra linha fputc(ch, dst); } fclose(src); fclose(dst); Edited February 13, 2013 at 12:21 AM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Psycho_Mind Posted February 13, 2013 at 11:52 AM Author Report #495085 Posted February 13, 2013 at 11:52 AM Se o ficheiro origem for "fixed width" a forma mais pratica, a meu ver, é ir passando bytes do source para o destino, acrescentando a virgula (e aspas), onde necessario: FILE *src = fopen("origem.txt", "r"); FILE *dst = fopen("destino.csv", "w"); int count = 0; int ch; while ((ch = fgetc(src)) != EOF) { count += 1; if (count == 5) fputc(',', dst); // acrescenta virgula if (count == 8) fputc(',', dst); if (count == 13) fputc(',', dst); if (count == 16) fputc(',', dst); if (count == 42) fputc(',', dst); if (count == 63) count = 0; // outra linha fputc(ch, dst); } fclose(src); fclose(dst); Percebi a tua ideia, tinha era pensado em fazer informação, informação, informação /fim de linha/ informação, informação... e o ficheiro que é criado vir logo com a informação desta forma para utilizar o .csv
pmg Posted February 13, 2013 at 12:02 PM Report #495088 Posted February 13, 2013 at 12:02 PM Ahhhhh, podes alterar o programa que captura dos pacotes na rede? Então claro: em vez do programa criar TXT não estruturado, altera-o para ele criar CSVs! What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Psycho_Mind Posted February 13, 2013 at 12:20 PM Author Report #495095 Posted February 13, 2013 at 12:20 PM Ahhhhh, podes alterar o programa que captura dos pacotes na rede? Então claro: em vez do programa criar TXT não estruturado, altera-o para ele criar CSVs! Sim, sim, posso. O que tinha pensado era manter o programa a produzir o ficheiro .txt com a info dos pacotes produzidos e depois ter tambem a dar um outro ficheiro mas para o .csv, pois so preciso msm deste e para poder tratar as estatisticas dos dados. Assim para este estava a pensar em fazer algo como introduzir entre os dados d1,d2,d3, \n e assim sucessivamente, mas para ter o programa a dar o .txt como esta, mais este novo com as virgulas, teria de ter isto a fazer algo como que a passar para uma String ou assim, s+= "," + "nova string". Aqui é que está a minha principal duvida, qual a melhor forma de o fazer, até porque sendo isto em C as string não sei até que ponto funcionariam.
HappyHippyHippo Posted February 13, 2013 at 12:28 PM Report #495099 Posted February 13, 2013 at 12:28 PM se as strings tiverem tamanho máximo, podes fazer: // tamanho máximo de uma entrada em caracters #define ELEMENT_SIZE 100 // numero de entradas por linha (exemplo para 4) #define ELEMENT_COUNT 4 // tamanho maximo necessario para guardar uma linha // ASPAS + STRING + ASPAS [VIRGULA + ...] FIM_DE_LINHA #define STRING_SIZE ((ELEMENT_SIZE + 2) * ELEMENT_COUNT + ELEMENT_COUNT) int main() { // ... char * ent1, * ent2, * ent3, * ent4; char linha[sTRING_SIZE]; sprintf(linha, "\"%s\",\"%s\",\"%s\",\"%s\"\n", ent1, ent2, ent3, ent4); // gravar a string "linha" no ficheiro // ... } IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
pmg Posted February 13, 2013 at 12:28 PM Report #495100 Posted February 13, 2013 at 12:28 PM (edited) Onde tens fprintf(txtfile, "%d - %s - %d, %d, %d\n", n, code, a, b, c); Passas a ter fprintf(txtfile, "%04d - %20s - %4d, %4d, %4d\n", n, code, a, b, c); fprintf(csvfile, "%d,"%s",%d,%d,%d\n", n, code, a, b, c); Edited February 13, 2013 at 12:40 PM by pmg GeSHi What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Psycho_Mind Posted February 13, 2013 at 12:35 PM Author Report #495103 Posted February 13, 2013 at 12:35 PM Obrigado pessoal. Vou ver o que consigo fazer com as vossas dicas.
Psycho_Mind Posted February 15, 2013 at 03:59 PM Author Report #495430 Posted February 15, 2013 at 03:59 PM Ora viva... As vossas dicas ajudaram e muito, já consegui ter isto a funcinar como pretendido. Vinha agora com uma questão semelhante mas para html. O meu intuito é ter os resultados dos pacotes apresentados em tabelas para poder depois formatar as mesmas mais facilmente e ter outro tipo de formatação, mas aqui não faço mesmo a minima ideia de como o fazer utilizando o código C que tenho. Neste caso sei como funciona uma tabela em HTML, até é bastante simples, não sei é como conseguir integrar a mesma com os pacotes capturados.
pmg Posted February 15, 2013 at 04:12 PM Report #495433 Posted February 15, 2013 at 04:12 PM (edited) Sem contar com as dificuldades (ligeiras) do principio e fim da tabela, fazes como a alteração do TXT para CSV. No principio de cada linha metes "<tr><td>"; entre cada elemento metes "</td><td>"; e no fim de cada linha metes "</td></tr>". Mais ou menos assim fprintf(htmlfile, "<tr><td>%d</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td></tr>", n, code, a, b, c); Edited February 15, 2013 at 04:14 PM by pmg codigo exemplo What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Psycho_Mind Posted February 15, 2013 at 04:25 PM Author Report #495436 Posted February 15, 2013 at 04:25 PM Sem contar com as dificuldades (ligeiras) do principio e fim da tabela, fazes como a alteração do TXT para CSV. No principio de cada linha metes "<tr><td>"; entre cada elemento metes "</td><td>"; e no fim de cada linha metes "</td></tr>". Mais ou menos assim fprintf(htmlfile, "<tr><td>%d</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td></tr>", n, code, a, b, c); Pois... Mas ele da-me erros referentes às expressões que estou a utilizar. Isto precisa de algum tipo de import ou basta ter os dados entre: <html> <table> fprintf(htmlfile, "<tr><td>%d</td><td>%s</td><td>%d</td><td>%d</td><td>%d</td></tr>", n, code, a, b, c); ... Por certo terei de ter outros atributos porque ter isto ali no meio do C...
HappyHippyHippo Posted February 15, 2013 at 04:28 PM Report #495437 Posted February 15, 2013 at 04:28 PM estás a meter código C no meio de HTML ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
Psycho_Mind Posted February 15, 2013 at 04:29 PM Author Report #495438 Posted February 15, 2013 at 04:29 PM estás a meter código C no meio de HTML ? Não HTML no C 🙂 Por isso as minhas duvidas de como integrar o HTML no C. HTML no código C que tenho para ter os resultados num ficheiro .html Por isso as minhas duvidas de como integrar o HTML no C.
pmg Posted February 15, 2013 at 04:33 PM Report #495439 Posted February 15, 2013 at 04:33 PM ... ele da-me erros ... Quais erros? Quem é "ele"? Ou estás a escrever um programa em C e "ele" é o compilador e os erros são erros de sintaxe (não podes ter duas linguagens 'activas' no mesmo ficheiro source) ou não sei. O que é que queres? Queres alterar o programa que já fizeste e que cria ficheiros TXT, ficheiros CSV, etc? Queres fazer outro programa (em C?) que usa os ficheiros produzidos pelo teu primeiro programa? What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Psycho_Mind Posted February 15, 2013 at 04:36 PM Author Report #495440 Posted February 15, 2013 at 04:36 PM Quais erros? Quem é "ele"? Ou estás a escrever um programa em C e "ele" é o compilador e os erros são erros de sintaxe (não podes ter duas linguagens 'activas' no mesmo ficheiro source) ou não sei. O que é que queres? Queres alterar o programa que já fizeste e que cria ficheiros TXT, ficheiros CSV, etc? Queres fazer outro programa (em C?) que usa os ficheiros produzidos pelo teu primeiro programa? Tenho o tal ficheiro C a fazer as capturas para o qual me dá um file .txt e agora o novo .csv como tinhamos visto. Agora queria ver se conseguia ter também esses resultados apresentados em tabelas HTML. Claro que utilizando o código C que faz as capturas como anteriormente.
pmg Posted February 15, 2013 at 04:39 PM Report #495443 Posted February 15, 2013 at 04:39 PM (edited) Então tens que resolver as "dificuldades (ligeiras)" do principio e fim da tabela com C. fprintf(htmlfile, "<!doctype html><html><head>...</head><body><table>"); /* codigo em loop para cada linha */ fprintf(htmlfile, "</table></body></html>\n"); E no fim do programa, aparentemente, ficas com 3 ficheiros: um TXT, um CSV, e um HTML. Edited February 15, 2013 at 04:42 PM by pmg What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
Psycho_Mind Posted February 15, 2013 at 04:45 PM Author Report #495445 Posted February 15, 2013 at 04:45 PM Então tens que resolver as "dificuldades (ligeiras)" do principio e fim da tabela com C. fprintf(htmlfile, "<!doctype html><html><head>...</head><body><table>"); /* codigo em loop para cada linha */ fprintf(htmlfile, "</table></body></html>\n"); E no fim do programa, aparentemente, ficas com 3 ficheiros: um TXT, um CSV, e um HTML. Acho que já consegui... Não estava a estruturar a coisa corretamente. Deixa ver se consigo tratar todos os dados para ver se resulta corretamente.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now