Toon posts:

[c++] Het inlezen van Text-files onder dos.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik gebruik borland c++ editor 3.0.
En ik wil een textfile per regel inlezen zodat ik per
regel deze in een variable zetten kan.
Ik zelf al wat gemaakt wat onder linux het doet.
Maar onder dos wilt hij gewoon niet.

Weet iemand toevallig een example staan waar ze een
textfile onder dos inlezen.
Ik heb al heel wat afgezocht maar het werkt bij mij
alleen onder linux maar niet onder dos....

THNX

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 17-08 12:12

Killemov

Ik zoek nog een mooi icooi =)

LF (non-DOS) / CRLF (DOS) probleempje misschien ?

Hey ... maar dan heb je ook wat!


Verwijderd

Zoals Killemov's post al enigszins aangeeft, kunnen wij met de gegeven informatie slechts gokken wat het probleem is. Als je even zou laten zien welke code al wel werkt onder Linux, kunnen we je wellicht helpen uit te vinden waarom deze niet onder Dos/Windows werkt.

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 26-02 09:52
stuur anders ff de code waar de file wordt ingelezen.

als je c++ progt, dan kun je file_input_stream gebruiken en het getline methode hele regel inlezen... als het goed is heb je dan geen problemen met LF/CRLF aan het einde van de regel.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

dos: '\n\r' (of was het nou andersom)
mac: '\r'
*nix: \n'

Verwijderd

Op zondag 14 juli 2002 12:46 schreef tasker het volgende:
Ik gebruik borland c++ editor 3.0.
En ik wil een textfile per regel inlezen zodat ik per
regel deze in een variable zetten kan.
Ik zelf al wat gemaakt wat onder linux het doet.
Maar onder dos wilt hij gewoon niet.
BC 3.0 is een oudere compiler, het kan best zijn dat je taal-features gebruikt die die compiler niet ondersteunt.
Weet iemand toevallig een example staan waar ze een
textfile onder dos inlezen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream>
#include <string>

const char fname[]= "blah.txt";

int main() {
  std::ifstream file(fname);
  if(!file) return 1;

  std::string line;
  while(std::getline(file, line)) {
    std::cout << line << std::endl;
  }

  return 0;
}

<edit>
En std::getline() hoort voor elk platform te werken, ongeacht welke karakters er op dat platform gebruikt worden om een nieuwe regel te beginnen.
</edit>

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:57

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op zondag 14 juli 2002 13:25 schreef Alarmnummer het volgende:
dos: '\n\r' (of was het nou andersom)
andersom :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ik zal het voorbeeldje ff in men progje bewerken.
Als het niet werkt horen jullie wel van me.
En dan zal ik ook de source laten zien.
THNX for All

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 00:13
Op zondag 14 juli 2002 14:56 schreef mietje het volgende:

[..]

BC 3.0 is een oudere compiler, het kan best zijn dat je taal-features gebruikt die die compiler niet ondersteunt.
[..]
BC3 ondersteunt iig geen namespaces, en kent ook geen standaard C++ headers zonder de .h extensie.
Ik vraag me eerlijk gezegd af of je uberhaubt wel voor linux kunt copileren met BC.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Op zondag 14 juli 2002 13:25 schreef Alarmnummer het volgende:
dos: '\n\r' (of was het nou andersom)
mac: '\r'
*nix: \n'
C++ op DOS: '\n'
C++ op mac: '\n'
C++ op UNIX: '\n'
C++ op dat alien mothership uit ID4: '\n' :)

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Op maandag 15 juli 2002 10:59 schreef MSalters het volgende:

[..]

C++ op DOS: '\n'
C++ op mac: '\n'
C++ op UNIX: '\n'
C++ op dat alien mothership uit ID4: '\n' :)
Hoe die enter op een bepaald platform is opgebouwd, heeft totaal niets te doen met de programmeer taal. Ik denk dat je grote problemen gaat krijgen alsje niet gaat erkennen dat onder dos ook 'gekke' enters tegen komt. (Ik heb ervaring ermee de enters niet goed te herkennen bij oa bij parsers en lexers en dan krijg je gekke foutmeldingen).

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Op maandag 15 juli 2002 12:38 schreef Alarmnummer het volgende:

[..]

Hoe die enter op een bepaald platform is opgebouwd, heeft totaal niets te doen met de programmeer taal. Ik denk dat je grote problemen gaat krijgen alsje niet gaat erkennen dat onder dos ook 'gekke' enters tegen komt. (Ik heb ervaring ermee de enters niet goed te herkennen bij oa bij parsers en lexers en dan krijg je gekke foutmeldingen).
C en C++ zijn extreem duidelijk: in text mode moet de library ervoor zorgen dat je alleen \n ziet. Dat heeft helemaal niks met het platform te maken. En ja, dat maakt het lastig om een positie in een (DOS) text file te vinden. Het 100e karakter hoeft niet byte 100 te zijn; dat is een *nix aanname.
In binary mode kun je lang niet altijd text files lezen (bv op IBMs werkt dat niet). Een standaard parser/lexer moet dus de text mode gebruiken en kan rustig \n gebruiken.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Op maandag 15 juli 2002 12:38 schreef Alarmnummer het volgende:
Hoe die enter op een bepaald platform is opgebouwd, heeft totaal niets te doen met de programmeer taal.
Dat heeft het dus wel. Zowel C als C++ doen aan newline-conversion, en veranderen de newline-sequence van het betreffende OS in '\n' en vice versa. Vandaar ook dat getline() op elk platform werkt.
Ik denk dat je grote problemen gaat krijgen alsje niet gaat erkennen dat onder dos ook 'gekke' enters tegen komt. (Ik heb ervaring ermee de enters niet goed te herkennen bij oa bij parsers en lexers en dan krijg je gekke foutmeldingen).
Het probleem is dan dat de betreffende editor geen correcte newlines produceert; "\r\n" is niet het zelfde als "\n\r". Helaas voor je editor, maar omdat die zich niet aan een conventie houdt betekent dat niet dat je programma het daarom ook maar niet moet doen.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik wist niet dat c++ libraries altijd converteerden als je met text bezig was. Heb ik weer iets geleerd :)
Pagina: 1