File parsing
Код:
ftp://123456:654321@192.168.1.1
Вот исходник:
Код:
#include <stdio.h>
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fread(&list,sizeof(list),(int)strlen(list),f1);
fclose(f1);
printf("\nString: %s\n",list);
fwrite(list,sizeof(str),(int)strlen(str),f2);
fclose(f2);
return 0;
}
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fread(&list,sizeof(list),(int)strlen(list),f1);
fclose(f1);
printf("\nString: %s\n",list);
fwrite(list,sizeof(str),(int)strlen(str),f2);
fclose(f2);
return 0;
}
Когда я записываю в файл то у меня после ftp://123456:654321@192.168.1.1 ещё много всяких символов и не знаю как с этим бороться. Сначала с помощью printf тоже выводилось много мусора мосле текста а сеёчас вроде нет хотя это не из-зи list[31] хоть list[256] поставить всё равно через printf всё будут выведено нормально.
Подскажите как мне записать в файл нормально, а то я уже и не знаю как это сделать.
Код:
fread(list, sizeof(list), 1, f1);
list[strlen(list)] = 0;
list[strlen(list)] = 0;
Цитата: 4nob1oz
Вот никак не могу разобраться. Есть у меня файл. В нём например записано
Вот исходник:
Когда я записываю в файл то у меня после ftp://123456:654321@192.168.1.1 ещё много всяких символов и не знаю как с этим бороться. Сначала с помощью printf тоже выводилось много мусора мосле текста а сеёчас вроде нет хотя это не из-зи list[31] хоть list[256] поставить всё равно через printf всё будут выведено нормально.
Подскажите как мне записать в файл нормально, а то я уже и не знаю как это сделать.
Код:
ftp://123456:654321@192.168.1.1
Вот исходник:
Код:
#include <stdio.h>
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fread(&list,sizeof(list),(int)strlen(list),f1);
fclose(f1);
printf("\nString: %s\n",list);
fwrite(list,sizeof(str),(int)strlen(str),f2);
fclose(f2);
return 0;
}
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fread(&list,sizeof(list),(int)strlen(list),f1);
fclose(f1);
printf("\nString: %s\n",list);
fwrite(list,sizeof(str),(int)strlen(str),f2);
fclose(f2);
return 0;
}
Когда я записываю в файл то у меня после ftp://123456:654321@192.168.1.1 ещё много всяких символов и не знаю как с этим бороться. Сначала с помощью printf тоже выводилось много мусора мосле текста а сеёчас вроде нет хотя это не из-зи list[31] хоть list[256] поставить всё равно через printf всё будут выведено нормально.
Подскажите как мне записать в файл нормально, а то я уже и не знаю как это сделать.
Это элементарно, Ватсон! У вас строка не закачивается терминальным нклем. Ее либо нужно записать в первоначальный файл, либо сообщить програмке размер строки, либо вставлять его при нрекоторых условиях. например, заменять пробел символом 0х00.
Код:
#include <stdio.h>
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fread(list, sizeof(list), 1, f1);
list[strlen(list)] = 0;
printf("\nString: %s\n",list);
fwrite(list,sizeof(list),1,f2);
fclose(f2);
fclose(f1);
return 0;
}
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fread(list, sizeof(list), 1, f1);
list[strlen(list)] = 0;
printf("\nString: %s\n",list);
fwrite(list,sizeof(list),1,f2);
fclose(f2);
fclose(f1);
return 0;
}
Только вот не пойму никак почему именно в
fread(list, sizeof(list), 1, f1); и fwrite(list,sizeof(list),1,f2); в третьем параметре нужно было писать 1. В документации написано что это "Maximum number of items to be read" это чтоже получается мне надо все пункты посчитать а потом парсить чтоли :confused: Вот этот момент обьясните тогда. А так спасибо за советы.
Цитата: nuhop
Попробуй так:
Код:
list[strlen(list)] = 0;
Это 5. В меморайз. :D:D:D:D
Код:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
fread reads n items of data each of length size bytes from the given input stream into a block pointed to by ptr.
И вообще советую почитать, что такое строки, файлы, и с чем их едят. Ибо знания твои минимальны.
Цитата: 4nob1oz
Код:
#include <stdio.h>
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
memset(list, 0, sizeof(list));
fread(list, sizeof(list), 1, f1);
printf("\nString: %s\n",list);
fwrite(list,sizeof(list),1,f2);
fclose(f2);
fclose(f1);
return 0;
}
#include <string.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[31];
if (argc < 3)
{
printf("\n ---------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
memset(list, 0, sizeof(list));
fread(list, sizeof(list), 1, f1);
printf("\nString: %s\n",list);
fwrite(list,sizeof(list),1,f2);
fclose(f2);
fclose(f1);
return 0;
}
Код:
#include <stdio.h>
#include <string.h>
#include <conio.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[256],list2[256];
char delim[] = ":@";
char *token;
int offset=6;
if (argc < 3)
{
printf("\n ---------------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fseek(f1,0L,SEEK_SET);
while(!feof(f1))
{
fseek(f1,offset,SEEK_CUR);
fgets(list,100,f1);
printf("%s",list);
sscanf_s("%s",list);
fprintf(f2,"%s",list);
}
fseek(f2,0L,SEEK_SET);
while(!feof(f2))
{
fgets(list2,80,f2);
token=strtok(list2,delim);
while(token!=NULL)
{
printf("%s\0",token);
token=strtok(NULL,delim);
}
}
fclose(f1);
fclose(f2);
return 0;
}
#include <string.h>
#include <conio.h>
int main( int argc, char **argv )
{
FILE *f1,*f2;
errno_t errno;
char list[256],list2[256];
char delim[] = ":@";
char *token;
int offset=6;
if (argc < 3)
{
printf("\n ---------------------------------------------\n");
printf(" Usage: pars.exe <existing file> <output file>\n");
printf(" ---------------------------------------------\n");
return 0;
}
errno = fopen_s(&f1,argv[1],"r+");
errno = fopen_s(&f2,argv[2],"w+");
if ( f1 == NULL )
{
printf("[-] Cannot open file\n");
return 0;
}
fseek(f1,0L,SEEK_SET);
while(!feof(f1))
{
fseek(f1,offset,SEEK_CUR);
fgets(list,100,f1);
printf("%s",list);
sscanf_s("%s",list);
fprintf(f2,"%s",list);
}
fseek(f2,0L,SEEK_SET);
while(!feof(f2))
{
fgets(list2,80,f2);
token=strtok(list2,delim);
while(token!=NULL)
{
printf("%s\0",token);
token=strtok(NULL,delim);
}
}
fclose(f1);
fclose(f2);
return 0;
}
Хотел сделать чтобы файл если открыть там был список фтп. Все их пропарсит и отбросит ftp:// потом логины записать в один файл пароли в другой а хосты в третий. Вот и разбираюсь. Вроде разделяю через strtok а как записать в отдельные файлы не разберусь. Помогите ;-) Я думаю для знатоков не будет это сложно.
Чтоб все прошло легко - читай посимвольно входной файл и заполняй строку. Когда встречаются символы '\r' или '\n' - заканчиваеш формировать текущую строку (дописываеш 0 в конец), копируеш её куда надо, и начинаеш читать в новую строку(пропустивши '\r' и '\n').
Код:
#include <stdio.h>
#include <string.h>
#define MAX_LINE_TO_READ 1024
int main(int argc, char **argv) {
FILE *inf, *outf;
char *user, *passwd, *host, *someptr, buffer[MAX_LINE_TO_READ + 1] = {0};
if (argc != 3 ) {
printf("\n---------------------------------------------\n");
printf(" Usage: parse.exe <input file> <output file>\n");
printf("---------------------------------------------\n");
return -1;
}
if ((inf = fopen(argv[1], "r")) == NULL) {
printf("[-] Could not open input file\n");
return -1;
}
printf("[+] Input file opened...\n");
if ((outf = fopen(argv[2], "w+")) == NULL) {
printf("[-] Could not open output file\n");
return -1;
}
printf("[+] Output file opened...\n");
printf("[+] Reading data...\n");
while(!feof(inf))
{
fgets(&buffer[0], MAX_LINE_TO_READ, inf);
if (someptr = strstr(&buffer[0], "//"))
user = strtok(&someptr[2], ":");
else
user = strtok(&buffer[0], ":");
passwd = strtok(NULL, "@");
host = strtok(NULL, "");
fprintf(outf, "%s\n%s\n%s", user, passwd, host);
printf("[+] Writing portion of data...\n");
memset(buffer, MAX_LINE_TO_READ + 1, 0);
}
fclose(outf);
fclose(inf);
printf("[+] Exiting...\n");
return 0;
}
#include <string.h>
#define MAX_LINE_TO_READ 1024
int main(int argc, char **argv) {
FILE *inf, *outf;
char *user, *passwd, *host, *someptr, buffer[MAX_LINE_TO_READ + 1] = {0};
if (argc != 3 ) {
printf("\n---------------------------------------------\n");
printf(" Usage: parse.exe <input file> <output file>\n");
printf("---------------------------------------------\n");
return -1;
}
if ((inf = fopen(argv[1], "r")) == NULL) {
printf("[-] Could not open input file\n");
return -1;
}
printf("[+] Input file opened...\n");
if ((outf = fopen(argv[2], "w+")) == NULL) {
printf("[-] Could not open output file\n");
return -1;
}
printf("[+] Output file opened...\n");
printf("[+] Reading data...\n");
while(!feof(inf))
{
fgets(&buffer[0], MAX_LINE_TO_READ, inf);
if (someptr = strstr(&buffer[0], "//"))
user = strtok(&someptr[2], ":");
else
user = strtok(&buffer[0], ":");
passwd = strtok(NULL, "@");
host = strtok(NULL, "");
fprintf(outf, "%s\n%s\n%s", user, passwd, host);
printf("[+] Writing portion of data...\n");
memset(buffer, MAX_LINE_TO_READ + 1, 0);
}
fclose(outf);
fclose(inf);
printf("[+] Exiting...\n");
return 0;
}
Спасибо всем кто помогал.