clear all;



modus=input('auswertung (0) oder nummereingabe (1)?');
%   This software is protected by german copyright and international treaties.             
%   Copyright 2004 Markus Junghöfer & Peter Peyk. All Rights Reserved.                     
%                                                                                          
%   THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE        
%   NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO,    
%   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE    
%   OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS,
%   TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT,       
%   INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE      
%   OR DOCUMENTATION.                                                                      
if modus==0
    
cd('F:\Eigene Dateien\TelefonRechnungOnline\');
[sourcefilename,sourcefilepath]=uigetfile('*.csv','File der Einzelverbindungen auswählen:');
sourcefile=[sourcefilepath sourcefilename];
sourcefid=fopen(sourcefile,'rt');

%read header
for k=1:6
line=fgetl(sourcefid);
end

%read first line
line=fgetl(sourcefid);
linenumber=1;

%edit line
line=strrep(line,'""','" "');
linespaced=strrep(sscanf(line,'%s'),'","','#');
linespaced=strrep(linespaced,'"','');

%find index of  char==35
kommavec=(linespaced==35);

%index of 1
indexvec=find(kommavec);

%anzahl der zellen bestimmen
sizeindexvecvec=size(indexvec);
sizeindexvec=sizeindexvecvec(2);

%zelllaengen bestimmen
linesizevec=size(linespaced);
linesize=linesizevec(2);
distvec=zeros(1,sizeindexvec+1);
distvec(1)=indexvec(1);
for n=2:sizeindexvec
    distvec(n)=indexvec(n)-indexvec(n-1);
end
distvec(n+1)=linesize-indexvec(n);

%cell vorbereiten
datacell=cell(1,sizeindexvec+1);

%zellen sukkzessive einlesen und in cell kopieren
for l=1:sizeindexvec+1
    datacell{linenumber,l}=sscanf(linespaced,'%c',distvec(l)-1);
    linespaced(1:distvec(l))=[];
end
postenanzahl=1;

%read rest
while 1
   
   distvec=[];
   indexvec=[];
   kommavec=[];
   sizeindexvecvec=[];
   sizeindexvec=[];
   linenumber=linenumber+1;
   line=fgetl(sourcefid);
   if line==-1 break
   end
   postenanzahl=postenanzahl+1;
  %edit line
  line=strrep(line,'""','" "');
  linespaced=strrep(sscanf(line,'%s'),'","','#');
  linespaced=strrep(linespaced,'"','');
  %find index of  char==35
  kommavec=(linespaced==35);
  %index of 1
  indexvec=find(kommavec);
  %anzahl der zellen bestimmen
  sizeindexvecvec=size(indexvec);
  sizeindexvec=sizeindexvecvec(2);
  %zelllaengen bestimmen
  linesizevec=size(linespaced);
  linesize=linesizevec(2);
  distvec=zeros(1,sizeindexvec+1);
  distvec(1)=indexvec(1);
  for n=2:sizeindexvec
      distvec(n)=indexvec(n)-indexvec(n-1);
  end
  distvec(n+1)=linesize-indexvec(n);
  %zellen sukkzessive einlesen und in cell kopieren
  for l=1:sizeindexvec+1
      datacell{linenumber,l}=sscanf(linespaced,'%c',distvec(l)-1);
      linespaced(1:distvec(l))=[];
  end
end
fclose(sourcefid);



%nummernverzeichnis einlesen
nummernfilepeterhandle=fopen('F:\Eigene Dateien\TelefonRechnungOnline\telefonbuch\nummernverzeichnispeter.txt','rt+');
nummernfilewiebkehandle=fopen('F:\Eigene Dateien\TelefonRechnungOnline\telefonbuch\nummernverzeichniswiebke.txt','rt+');
lineindex=0;
while 1
    lineindex=lineindex+1;
    line=fgetl(nummernfilepeterhandle);
    if line==-1 break; end
    nummernpetercell{lineindex,1}=line;
end
nummernpetercellsizevec=size(nummernpetercell);
anzahlnummernpeter=nummernpetercellsizevec(1);
lineindex=0;
while 1
    lineindex=lineindex+1;
    line=fgetl(nummernfilewiebkehandle);
    if line==-1 break; end
    nummernwiebkecell{lineindex,1}=line;
end
nummernwiebkecellsizevec=size(nummernwiebkecell);
anzahlnummernwiebke=nummernwiebkecellsizevec(1);

%nummern prüfen
sizedatacellvec=size(datacell);
anzahlposten=sizedatacellvec(1);
modrechnungmat=zeros(anzahlposten,4);
modrechnungcell=cell(anzahlposten+2,4);
foundstatus=0;
modrechnungcell{1,1}='posten';
modrechnungcell{1,2}='peter';
modrechnungcell{1,3}='wiebke';
modrechnungcell{1,4}='unbekannt';
zaehler=0;
for o=1:anzahlposten
modrechnungcell{o+1,1}=datacell{o,12};
    while 1
    for p=1:anzahlnummernpeter
        if str2num(char(datacell{o,12}))==str2num(char(nummernpetercell{p,1}))
            modrechnungmat(o,2)=str2num(strrep(datacell{o,16},',','.'));
            modrechnungcell{o+1,2}=datacell{o,16};
            modrechnungcell{o+1,3}='X';
            modrechnungcell{o+1,4}='X';
            fprintf('.');
            foundstatus=1;
            break
        else end
    end
    if foundstatus==1
        break
    end
    for q=1:anzahlnummernwiebke
        if str2num(char(datacell{o,12}))==str2num(char(nummernwiebkecell{q,1}))
             fprintf('.');
            modrechnungmat(o,3)=str2num(strrep(datacell{o,16},',','.'));
            modrechnungcell{o+1,3}=datacell{o,16};
            modrechnungcell{o+1,2}='X';
            modrechnungcell{o+1,4}='X';
            foundstatus=1;
            break
        end
    end
    if foundstatus==1
        break
    end
    fprintf('.');
    modrechnungmat(o,4)=str2num(strrep(datacell{o,16},',','.'));
    modrechnungcell{o+1,4}=datacell{o,16};
    modrechnungcell{o+1,2}='X';
    modrechnungcell{o+1,3}='X';
    break
    end
    foundstatus=0;
zaehler=zaehler+1;
if zaehler>20
    fprintf('\n');
    zaehler=0;
end
end
summenvec=sum(modrechnungmat);
modrechnungcell{anzahlposten+2,1}='Summe';
modrechnungcell{anzahlposten+2,2}=num2str(summenvec(2));
modrechnungcell{anzahlposten+2,3}=num2str(summenvec(3));
modrechnungcell{anzahlposten+2,4}=num2str(summenvec(4));


%--------------------------------------------------------------------------
elseif modus==1
    cd('F:\Eigene Dateien\TelefonRechnungOnline\');
[sourcefilename,sourcefilepath]=uigetfile('*.csv','File der Einzelverbindungen auswählen:');
sourcefile=[sourcefilepath sourcefilename];
sourcefid=fopen(sourcefile,'rt');

%read header
for k=1:6
line=fgetl(sourcefid);
end
%read first line
line=fgetl(sourcefid);
linenumber=1;
%edit line
line=strrep(line,'""','" "');
linespaced=strrep(sscanf(line,'%s'),'","','#');
linespaced=strrep(linespaced,'"','');
%find index of  char==35
kommavec=(linespaced==35);
%index of 1
indexvec=find(kommavec);
%anzahl der zellen bestimmen
sizeindexvecvec=size(indexvec);
sizeindexvec=sizeindexvecvec(2);
%zelllaengen bestimmen
linesizevec=size(linespaced);
linesize=linesizevec(2);
distvec=zeros(1,sizeindexvec+1);
distvec(1)=indexvec(1);
for n=2:sizeindexvec
    distvec(n)=indexvec(n)-indexvec(n-1);
end
distvec(n+1)=linesize-indexvec(n);
%cell vorbereiten
datacell=cell(1,sizeindexvec+1);
%zellen sukkzessive einlesen und in cell kopieren
for l=1:sizeindexvec+1
    datacell{linenumber,l}=sscanf(linespaced,'%c',distvec(l)-1);
    linespaced(1:distvec(l))=[];
end
postenanzahl=1;
%read rest
while 1
   distvec=[];
   indexvec=[];
   kommavec=[];
   sizeindexvecvec=[];
   sizeindexvec=[];
   linenumber=linenumber+1;
   line=fgetl(sourcefid);
   if line==-1 break
   end
   postenanzahl=postenanzahl+1;
  %edit line
  line=strrep(line,'""','" "');
  linespaced=strrep(sscanf(line,'%s'),'","','#');
  linespaced=strrep(linespaced,'"','');
  %find index of  char==35
  kommavec=(linespaced==35);
  %index of 1
  indexvec=find(kommavec);
  %anzahl der zellen bestimmen
  sizeindexvecvec=size(indexvec);
  sizeindexvec=sizeindexvecvec(2);
  %zelllaengen bestimmen
  linesizevec=size(linespaced);
  linesize=linesizevec(2);
  distvec=zeros(1,sizeindexvec+1);
  distvec(1)=indexvec(1);
  for n=2:sizeindexvec
      distvec(n)=indexvec(n)-indexvec(n-1);
  end
  distvec(n+1)=linesize-indexvec(n);
  %zellen sukkzessive einlesen und in cell kopieren
  for l=1:sizeindexvec+1
      datacell{linenumber,l}=sscanf(linespaced,'%c',distvec(l)-1);
      linespaced(1:distvec(l))=[];
  end
end
fclose(sourcefid);
%nummernverzeichnis einlesen
nummernfilepeterhandle=fopen('F:\Eigene Dateien\TelefonRechnungOnline\telefonbuch\nummernverzeichnispeter.txt','a+t');
nummernfilewiebkehandle=fopen('F:\Eigene Dateien\TelefonRechnungOnline\telefonbuch\nummernverzeichniswiebke.txt','a+t');
lineindex=0;
while 1
    lineindex=lineindex+1;
    line=fgetl(nummernfilepeterhandle);
    if line==-1 break; end
    nummernpetercell{lineindex,1}=line;
end
nummernpetercellsizevec=size(nummernpetercell);
anzahlnummernpeter=nummernpetercellsizevec(1);
lineindex=0;
while 1
    lineindex=lineindex+1;
    line=fgetl(nummernfilewiebkehandle);
    if line==-1 break; end
    nummernwiebkecell{lineindex,1}=line;
end
nummernwiebkecellsizevec=size(nummernwiebkecell);
anzahlnummernwiebke=nummernwiebkecellsizevec(1);



%nummern prüfen
sizedatacellvec=size(datacell);
anzahlposten=sizedatacellvec(1);
modrechnungmat=zeros(anzahlposten,4);
modrechnungcell=cell(anzahlposten+2,4);
foundstatus=0;
modrechnungcell{1,1}='posten';
modrechnungcell{1,2}='peter';
modrechnungcell{1,3}='wiebke';
modrechnungcell{1,4}='unbekannt';
zaehler=0;
for o=1:anzahlposten
modrechnungcell{o+1,1}=datacell{o,12};
    while 1
    for p=1:anzahlnummernpeter
        if str2num(char(datacell{o,12}))==str2num(char(nummernpetercell{p,1}))
            modrechnungmat(o,2)=str2num(strrep(datacell{o,16},',','.'));
            modrechnungcell{o+1,2}=datacell{o,16};
            modrechnungcell{o+1,3}='X';
            modrechnungcell{o+1,4}='X';
            fprintf('.');
            foundstatus=1;
            break
        else end
    end
    if foundstatus==1
        break
    end
    for q=1:anzahlnummernwiebke
        if str2num(char(datacell{o,12}))==str2num(char(nummernwiebkecell{q,1}))
             fprintf('.');
            modrechnungmat(o,3)=str2num(strrep(datacell{o,16},',','.'));
            modrechnungcell{o+1,3}=datacell{o,16};
            modrechnungcell{o+1,2}='X';
            modrechnungcell{o+1,4}='X';
            foundstatus=1;
            break
        end
    end
    if foundstatus==1
        break
    end
    
   
   
    fprintf(['Nummer unbekannt : ',datacell{o,12},'\n']);
    besitzer=input('wiebke (0) oder peter (1) oder "weiß nich" (2) ?\n');
    if besitzer==1
        modrechnungmat(o,2)=str2num(strrep(datacell{o,16},',','.'));
        modrechnungcell{o+1,2}=datacell{o,16};
        modrechnungcell{o+1,3}='X';
        modrechnungcell{o+1,4}='X';
        fseek(nummernfilepeterhandle,0,'eof');
        fprintf(nummernfilepeterhandle,[datacell{o,12},'\n']);
        anzahlnummernpeter=anzahlnummernpeter+1;
        nummernpetercell{anzahlnummernpeter,1}=datacell{o,12};
    elseif besitzer==0
        modrechnungmat(o,3)=str2num(strrep(datacell{o,16},',','.'));
        modrechnungcell{o+1,3}=datacell{o,16};
        modrechnungcell{o+1,2}='X';
        modrechnungcell{o+1,4}='X';
        fseek(nummernfilewiebkehandle,0,'eof');
        fprintf(nummernfilewiebkehandle,[datacell{o,12},'\n']);
        anzahlnummernwiebke=anzahlnummernwiebke+1;
        nummernwiebkecell{anzahlnummernwiebke,1}=datacell{o,12};
    elseif besitzer==2
        modrechnungmat(o,4)=str2num(strrep(datacell{o,16},',','.'));
        modrechnungcell{o+1,4}=datacell{o,16};
        modrechnungcell{o+1,2}='X';
        modrechnungcell{o+1,3}='X';
    end
 
    break
    end
    foundstatus=0;
zaehler=zaehler+1;
if zaehler>20
    fprintf('\n');
    zaehler=0;
end
end
summenvec=sum(modrechnungmat);
modrechnungcell{anzahlposten+2,1}='Summe';
modrechnungcell{anzahlposten+2,2}=num2str(summenvec(2));
modrechnungcell{anzahlposten+2,3}=num2str(summenvec(3));
modrechnungcell{anzahlposten+2,4}=num2str(summenvec(4));
fclose(nummernfilepeterhandle);
fclose(nummernfilewiebkehandle);

end



wegschreiben=input('\nrechnung schreiben (1) oder nicht (0)?\n');
%ergebnisfile
if wegschreiben==1
    targetfilename=strrep(sourcefile,'.csv','_sort.csv');
    rechnunghandle=fopen(targetfilename,'wt');
    for s=1:anzahlposten+2
        for r=1:4
            fprintf(rechnunghandle,['"',modrechnungcell{s,r},'",']);
        end
        fprintf(rechnunghandle,'\n');
    end
               
    fclose(rechnunghandle);
end

fclose all;

