Avatar billede ehv Nybegynder
06. maj 2003 - 16:01 Der er 22 kommentarer og
1 løsning

hjælp til omskrive code ??input fra fil til input fra buffer

jeg har noget kode der læser input fra en fil og har brug for hjælp til at få det til at læse input fra en char buffer i steddet.

void main()
char tekst[MAX];
string x;
min komp;
   
ifstream input("test.txt");
       
while (input)
{     
  input.getline(tekst, MAX,'\n');
  x=x+tekst;
}

komp.opret(x); //opretter en string der senere skal udskriv

Dette skulle gerne ændres til at læse input fra en char buffer.........Please help, jeg er gået total kold på nuværende tidspunkt.
Avatar billede arne_v Ekspert
06. maj 2003 - 16:14 #1
Du skal bruge en strstream istedetfor en ifstream.
Avatar billede arne_v Ekspert
06. maj 2003 - 16:24 #2
Eksempel til inspiration:

#include <iostream>
#include <cstring>
#include <strstream>

using namespace std;

int main()
{
  char *s = "123\nabc\n";
  strstream ss;
  ss << s;
  char buf[100];
  ss.getline(buf,sizeof(buf),'\n');
  cout << buf << endl;
  ss.getline(buf,sizeof(buf),'\n');
  cout << buf << endl;
}
Avatar billede ehv Nybegynder
06. maj 2003 - 16:26 #3
hvordan gør jeg det programmet læser jo et input fra en fil på nuværende tidspunkt, det skal være input fra en char buffer?
Avatar billede ehv Nybegynder
06. maj 2003 - 16:27 #4
ups det var vist lidt for hurtigt af mig =)
jeg teste lige og vender tilbage
Avatar billede arne_v Ekspert
06. maj 2003 - 16:30 #5
No problem.

Jeg ligger lige et nyt svar.
Avatar billede ehv Nybegynder
06. maj 2003 - 18:00 #6
det ser umiddelbart ud til at virke, der er bare et problem. Jeg for kun udskrevet to linier fra min buffer og det er ikke det hele.
please help og der vil være en point bonus
Avatar billede arne_v Ekspert
06. maj 2003 - 18:10 #7
Jeg skal nok hjælpe.

Men jeg skal lige se lidt af din kode for helt at forstå problemet.
Avatar billede ehv Nybegynder
06. maj 2003 - 18:23 #8
ok. min buffer// fra beejs

if ((numbytes=recv(sockfd, buf_inn, MAXDATASIZE, 0)) == -1)
{
  perror("fejl: ");
  exit(1);
}       
retrbuf_inn[numbytes] = '\0';
// cout <<"Følgende er blevet modtaget: " << buf_inn;// til test
der er denne buf jeg skal havde ind i steddet for: ifstream input("test.txt");

ved ikke om det er nok?
Avatar billede arne_v Ekspert
06. maj 2003 - 19:16 #9
streambuf ss;
ss << retrbuf_inn;

og så bare ss.getline det nødvendige antal gange.
Avatar billede ehv Nybegynder
07. maj 2003 - 09:02 #10
1000 tak jeg tror jeg er på rette spor.........?
har du en ide forslag til at code det sammen med det første indlæg?
Avatar billede ehv Nybegynder
07. maj 2003 - 09:57 #11
er der en måde at blive ved med at udskrive til ss er tom
jeg får kun en linie udskrevet
Avatar billede ehv Nybegynder
07. maj 2003 - 10:39 #12
HEY Arne v tjek lige spørgsmål 349547 ;)
Avatar billede arne_v Ekspert
07. maj 2003 - 11:34 #13
Kan du ikke bruge:

while(!ss.eof()) {
}

?
Avatar billede ehv Nybegynder
07. maj 2003 - 11:54 #14
nej det ændre faktisk ingenting.
jeg sender lige coden med:
strstream ss;
ss << retrbuf_inn;
char tekst[2000];
string x;
lexer komp;
while (!ss.eof())
{     
  ss.getline(tekst,2000,'\n');
  x=x+nybuf;
}
komp.opret(x);

og min opret:
void lexer::opret(string tekst)
{     
  int ix;
  char s=1;
  tekst+=s;
  tekststreng=tekst;
  lav_tabel();
  for(ix=0;ix<symboltabel.size();ix++)
  cout <<symboltabel[ix] << endl;
  cout << s ;
}
giver det mening?
Avatar billede arne_v Ekspert
07. maj 2003 - 12:23 #15
Muligvis - jeg kan bare ikke helt gennemskue den.

ss << retrbuf_inn;
char tekst[2000];
string x;
lexer komp;
while (!ss.eof())
{     
  ss.getline(tekst,2000,'\n');  // læs linie ind i tekst
  x=x+nybuf; // append nybuf til x
}
komp.opret(x); // kald opret med x

Skal nybuf og tekst være det samme eller ??
Avatar billede ehv Nybegynder
07. maj 2003 - 12:37 #16
jeg modtager et array af char i min retrbuf_inn
den skal jeg havde lexet og derefter udskrevet til skærmen
jeg ved ikke om det er noget af en omvej jeg er på vej ud i men min lexer virker med et input fra en fil.
og den skulle gerne munde ud i at kunde lekse input fra min retrbuf_inn.
Avatar billede arne_v Ekspert
07. maj 2003 - 12:45 #17
Det jeg undrer mig over er at du læser fra retrbuf_inn til tekst
og så ligger du nybuf (som ikke er tekst) over i x og kalder
opret med x (som slet ikke har været i nærheden af retrbuf_inn -
ihvertfald ikke i den viste kode).
Avatar billede ehv Nybegynder
07. maj 2003 - 12:53 #18
jeg ved det men det først indlæg kan læse input fra en fil og den bruger tekst til at læse filen, og da min lekser funk kalder tekst bliver jeg vel nød til at bruge den?........er ikke lige den skarpeste i dag.
hvis det kommer til at virke er der ekstra ekstra Bonus
Avatar billede arne_v Ekspert
07. maj 2003 - 13:04 #19
Lad os prøve at gå lidt tilbage.

char tekst[MAX];
string x;
min komp;
   
ifstream input("test.txt");
       
while (input)
{     
  input.getline(tekst, MAX,'\n');
  x=x+tekst;
}

komp.opret(x);

virker med læsning fra fil ikke ?

Så læsning fra char array må være:

char tekst[MAX];
string x;
min komp;
   
strstream input;
input << retrbuf_inn;
       
while (input)
{     
  input.getline(tekst, MAX,'\n');
  x=x+tekst;
}

komp.opret(x);

eller ?
Avatar billede arne_v Ekspert
07. maj 2003 - 13:04 #20
Du har allerede givet mig bonus !

:-)
Avatar billede ehv Nybegynder
07. maj 2003 - 13:18 #21
jeg bliver nød til at vende tilbage for jeg kan ikke teste det komplet da jeg har fundet fejl i min lekser......det tager nok lidt tid =)
Avatar billede arne_v Ekspert
07. maj 2003 - 16:11 #22
Noget helt andet.

Hvis din lexer kan håndtere linie-skift så burde:

string x = retrbuf_inn;
komp.opret(x);

jo være nok.
Avatar billede ehv Nybegynder
07. maj 2003 - 21:05 #23
JEG VED DU HAR HØRT DET FØR..............."DU ER FOR SEJ"
Det virker nu og min lexer kunne håndtere linie skift
1000 tak for hjælpen
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