Avatar billede knudi Nybegynder
04. marts 2007 - 22:06 Der er 9 kommentarer

Søgning i en tekst streng

Jeg er ved at lave program som skal læse en fil fra den ene ende til den ande, og det læser en linie af 60 karakter af gangen, hvis den linie jeg læser indeholder bogsatvskombintion PF eller PA, så skal jeg skrive hele linie ud i en ny fil eller så skal jeg bare kører videre, det der er mit problme er hvordan jeg nemmest scanner igennem tekststrengen, mit program ser ud som følger, der hvor jeg læser og skriver:

ifstream input_fil(m_Input_Fil);
char linie[60];
m_Output_Fil1="PFPA.txt";
ofstream output_fil1(m_Output_Fil1);

while(!input_fil.eof())
{
   
    input_fil.read(linie,60);
    output_fil1.write(linie, 60);
   
}
input_fil.close();

Det der mangler, er tjekket omrking inden jeg skriver, er der nogle der kan hjælpe med dette?
Avatar billede bertelbrander Novice
04. marts 2007 - 23:15 #1
if(strstr(linie, "PF") || strstr(linie, "PA"))
          output_fil1.write(linie, 60);
Avatar billede knudi Nybegynder
06. marts 2007 - 22:04 #2
Dette tjek virker helt fint, men jeg kan ikke få den til at stoppe med at læse når jeg når et linie skift:

while(!input_fil.eof())
{
    input_fil.getline(linie,67,'/n');
               
    if(strstr(linie, "PF") || strstr(linie, "PA"))
    output_fil1.write(linie, 67);
           
}

Dette stopper ikke fordi den møder et linieskift, den læser bare 67 karakter, og så videre til de næste 67.

Nogen der kan hjælpe med at få den til at stoppe ved linie skift.

Mit input ser ud som følger:

ID              26.  DATA OK; FORETAG OPRETTELSE VED TRYK PÅ PF1
ID              27.  INDTAST VALG           
ID              30.  INGEN BOOKINGER OPFYLDER SØGEKRITERIET

Hver linie kan max være 67 karakter.
Avatar billede bertelbrander Novice
06. marts 2007 - 22:42 #3
Prøv med:
  while(input_fil.getline(linie, 67, '\n'))
  {
      if(strstr(linie, "PF") || strstr(linie, "PA"))
        cout << linie << std::endl;
  }
Avatar billede knudi Nybegynder
09. marts 2007 - 21:43 #4
Det virker det svære ikke, input ser ud som følger:
...
DBS              26.  DATA OK; FORETAG OPRETTELSE VED TRYK PÅ PF1   
DBS              27.  INDTAST VALG                                 
DBS              28.  INDTAST ANTAL                                 
DBS              29.  ANGIV ENTEN ANSVARLIG ELLER DATO           
...

Og outputtet er kommet til at se ud som følger:

RETAG OPRETTELSE VED TRYK PÅ PF1   
DBS              27.  INDTAST 30.  INGEN BOOKINGER OPFYLDER SØGEKRITERIET       
DBS            47.  DATA OK; FORETAG ÆNDRING VED TRYK PÅ PF1     
DBS        BMIT KONTROLKØRSEL VED TRYK PÅ PF1 
DBS              60.  PROJEKT

Der er flere linier føj og efter i inputtet, det jeg skal have læst er linie fra
første karakter, og så til linie skiftet, uanset hvorlang den er.
Avatar billede bertelbrander Novice
09. marts 2007 - 23:11 #5
Hvordan skriver du linie ud? Brug << og ikke write
Hvordan er linie erklæret?
Avatar billede knudi Nybegynder
10. marts 2007 - 08:40 #6
Linie er defineret som :

char linie[67];

Når jeg skriver linie ud bruger jeg write:

output_fil1.write(linie, 67);

Hvordan skal det skrives hvis man skal bruge <<?

Det hele ser ud som følger:

ifstream input_fil(m_Input_Fil);
CString m_Output_Fil1;
char Start(1);
char Skilletegn(1);
char linie[67];
       
m_Output_Fil1="PFPA.txt";

//Åbner output-filen
   
ofstream output_fil1(m_Output_Fil1);




while(!input_fil.eof())
{
      while(input_fil.getline(linie,67,'/n')){
                   
      if(strstr(linie, "PF") || strstr(linie, "PA"))
        output_fil1.write(linie, 67);

      }
               
}
input_fil.close();
output_fil1.close();
Avatar billede bertelbrander Novice
10. marts 2007 - 15:05 #7
Dette virker:

#include <string.h>
#include <fstream>
#include <iostream>
#include <string>

int main()
{
  std::ifstream input_fil("inp.txt");
  std::ofstream output_fil("out.txt");
  char linie[67];
  while(input_fil.getline(linie, 67, '\n'))
  {
      if(strstr(linie, "PF") || strstr(linie, "PA"))
        output_fil << linie << std::endl;
  }
}

Bemærk at det er '\n' og ikke '/n'
Avatar billede knudi Nybegynder
10. marts 2007 - 22:50 #8
Nu har jeg fået det til at virke, problemt var at jeg havde skrevet /n og ikke \n, så hvis du vil have pointene, må du lige ligge et svar, så tak for hjælpen.
Avatar billede bertelbrander Novice
10. marts 2007 - 23:24 #9
Jeg samler ikke på point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester