#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
using namespace std;
void zamchars(string& str2ed, char ch2del) //Заменяем символы ch2del на пробелы
{
for(int i=1; i<str2ed.length(); i++) {
if(str2ed==ch2del) str2ed=' ';
};
}
void delspace(string& str2ed) //Удаление двойных пробелов
{
for(int i=1; i<str2ed.length(); i++) {
if(isspace(str2ed) && isspace(str2ed[i-1])) {
//cout<<"In string "<<str2ed<<endl;
//cout<<"Found double space in pos "<<i<<endl;
str2ed=str2ed.erase(i-1, 1);
i--;
//cout<<"Double space erased! New string:"<<str2ed<<endl;
//char sel;
//cin>>sel;
};
};
}
void getnewline(ifstream& infile, ofstream& outfile, int lencell)
{
string newstr, orgname, telnum, nextstr;
do {
getline(infile, newstr);
char next;
infile.get(next); //Проверим, не остался ли конец этой
while(!isalpha(next)) // строки на следующих строках критерий - число
{ //или знак препинания.
infile.putback(next);
getline(infile, nextstr);
infile.get(next);
newstr=newstr+nextstr;
};
infile.putback(next);
zamchars(newstr, ';');
delspace(newstr); //убираем лишние знаки и пробелы
int i=0;
while(!isdigit(newstr) && (newstr!='+')) i++;
newstr.insert(i, "\n"); //Добавляем перевод строки перед номером телефона
outfile<<setw(82)<<newstr<<endl;
for(i=0; i<82; i++) outfile<<"-";
outfile<<endl; //Вывод в файл с разделением записей
} while(!infile.eof());
}
/*void getfileline(ifstream& infile, ofstream& outfile, int lencell) {
string orgname, telnum, nextstr;
do {
getline(infile, orgname, ';');
int len=orgname.length();
int koeff=len/lencell;
if((len%lencell)==0) koeff--;
int i=1;
while(koeff>0) { orgname.insert(lencell*i,1, '\n');
i++;
koeff--;
};
while((orgname.length()%lencell)!=0) {
orgname.insert(orgname.length(),1,' ');
};
char next;
do { infile.get(next); } while(next==';');
if(next!=';') infile.putback(next);
//while(next!='\n') {
//infile.putback(next);
getline(infile, telnum);
infile.get(next);
while(next==';') {
getline(infile, nextstr);
telnum=telnum+nextstr;
infile.get(next);
};
infile.putback(next);
for(int i=0; i<telnum.length(); i++) {
if(telnum==';') telnum=' ';
}
//delchars(telnum, ' ');
delspace(telnum);
//do{infile.get(next); } while(next==';');
//outfile.seekp(lencell+4);
if(isdigit(telnum[1])) {
outfile<<setw(82)<<orgname<<endl;
outfile<<" "<<setw(telnum.length()+2)
<<setiosflags(ios::left)<<telnum<<endl;
for(i=0; i<82; i++) outfile<<"-";
outfile<<endl;
};
//infile.get(next);
} while(!infile.eof());
outfile<<endl;
}*/
int main() {
/*if(argc!=3) {cout<<"Use program: filemodify infile outfile"<<endl;
exit(1);
}*/
string firstfile;
string secfile;
cout<<"Enter input file name >";
cin>>firstfile;
cout<<endl<<"Enter output file name >";
cin>>secfile;
cout<<endl;
ifstream fin;
ofstream fout;
fin.open(firstfile.c_str());
if(fin.fail()) { cout<<"Error open "<<firstfile<<endl;
char sel;
cin>>sel;
exit(1);
}
fout.open(secfile.c_str());
if(fout.fail()) { cout<<"Error open "<<secfile<<endl;
exit(1);
}
int cell_length;
cout<<"Enter a length of Company name cell >";
cin>>cell_length;
cout<<endl;
//getfileline(fin, fout, cell_length);
getnewline(fin, fout, 82);
fin.close();
fout.close();
return 0;
}
Realise работает а Debug версия вылетает!
Цитата:
Debug assertion Failed
Program: filemodify
File: isctype.c
Line: 56
Expression: (unsigned)(c+1)<=256
Вообще то я макросов assert никуда не вставлял. Программа берет csv файл со списком телефонов, удаляет из него лишние символы (';'), и записывает полученный список телефонов в удобочитаемом виде в текстовый файл.
Код:
Частично приведу файл, на котором вылетаем:
Цитата:
Radisson SAS Slavyanskaya Hotel;80959418118;80959418668;;;;;;;
;;9518138;;;;;;;
METRO Cash&Carry OOO;80955021052;80955021096;;;;;;;
Бритиш Бродкастинг Корпорейшн;80957752957;;;;;;;;
ЮГНПЦ Прогресс;593386;8103800482593348;;;;;;;
;;;;;;;;;89161248772
МГУП Промотходы;;;;;;;80956810892;;
МГУП Промотходы;;80952380572;;80957604014;;;80954350954;;80957680586
ООО «МКФ ЭНЕРГО»;80957252426;89164484431;;;;;;;80951399815
Экоцентр;;;;;;;3531510;;
Пробирная палата России Центральная госинспекция;;80952097261;;;;;5903473;;89169606004
МГУП Промотходы;;9591618;;;;;;;89167071916
ООО «МКФ ЭНЕРГО»;;80957252426;;;;;;;89161463271
Коммерческий банк «Альта-банк» (ЗАО);;80952731357;;;;;;;
МГУП Промотходы;;80952386685;;;;;;;
ООО Филипс;80959330338;80959330339;;;;;;;1064856
МГУП Промотходы;;80959591713;;;;;;;
Московская Межбанковская Валютная Биржа;7059622;7059672;;;;;;;89161648785
ОАО МТС;7660180;9112190 доб 17561;;;;;;;89165181757
МГУП Промотходы;;80952562003;;;;;;;89161857744
Debug версия программы вылетает после вывода в новый файл строчки с:
ОАО МТС;7660180;9112190 доб 17561;;;;;;;89165181757
При этом Realise версия работает, но, к сожалению, кое-где не полностью удаляет лишние символы. Почему-понять не могу, так как отладка не успевает дойти до этого места. Помогите - ооочень нужна программка.
Посмотри, что именно в твоей программе приводит к его появлению.