Toon posts:

[c++] regels afbreken na bepaalde lengte in textbestand

Pagina: 1
Acties:
  • 235 views sinds 30-01-2008

Verwijderd

Topicstarter
Beste tweakers.net-lui. Ik heb een vraagje:

Ik moet een programma in c++ schrijven dat een kantlijn toevoegd aan een tekst-bestand. Als de zin te lang is (bij 50 characters) moet hij de zin afbreken en naar de volgende regel gaan waar hij weer een kantlijn toevoegd. Alles werkt tot nu toe alleen als de zin te lang is weet ik niet wat ik moet doen.

Kunnen jullie mij misschien een tip/hint geven?

Mvg,

MagicPatrick

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:12

Creepy

Tactical Espionage Splatterer

Je zult op 1 of andere manier de lengte van een regel moete bepalen.... en dan de rest van de regel meenemen naar de volgende regel...

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
strlen(text)

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hoi, welkom in P&W :)
Lees ook even Welkom in P&W -> Quickstart om snel aan de slag te kunnen, waarin staat hoe je een topic moet openen, en Welkom in P&W (FAQ-13/7/2002) voor de forumregels

Je openingspost is nogal onduidelijk, wij kunnen immers niet raden wat jij fout doet als je niet laat zien wat je doet. Ik zal ook even je topictitel wijzigen, aangezien die niet echt aangeeft waarover je probleem gaat :)

tip: als je code post kun je die plaatsen tussen zogenaamde code-tags:

[code=c++]
je code hier
[/code]

geeft:
C++:
1
je code hier

dat leest duidelijker en de formatting blijft behouden :)

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.


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:12

Creepy

Tactical Espionage Splatterer

Ok.. en je probleem is nu? Wat heb je geprobeerd? Krijg je een foutmelding? Zo ja welke?? (zie ook de P&W FAQ en quickstart guide)

Oisyn: grr! ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
sorry.

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void main() {
    const int maxsize = 50;

/*  char in_file[100], out_file[100];
    cout << "Voer het pad van het bronbestand in: ";
    cin.getline(in_file,100);
    cout << "Voer het pad van het uitvoerbestand in: ";
    cin.getline(out_file,100);
    cout << "\n\n";
*/

    const char in_file[] = {"g:\\tzk.txt"};
    const char out_file[] = {"g:\\tmk.txt"};

    ifstream input;
    input.open(in_file);
    ofstream output;
    output.open(out_file);

    if(!(input.fail() || output.fail())) {
        int size = 0;
        char text[255];
        input.getline(text,255);
        while (!input.eof()) {
            //text bewerken
            output << "\    º " << text << "\n";
            input.getline(text,255);
        }
  }
    else {
        cout << "An error occured while opening one or both files. Please try again.";
    }
    input.close();
    output.close();
    cout << "File processing completed...\nProgram will be terminated\n";
}


Kan je hier wat mee?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

code:
1
2
3
4
5
6
7
8
9
10
11
12
voor iedere regel:
  plak kantlijn;
  plak overloop buffer indien aanwezig;
  bepaal het aantal karakters dat nog past;
  Reken terug naar de laatste spatie;
  plak tot aan die spatie
  plaats de rest in de overloop;
einde
als er iets in de overloop zit
  plak kantlijn
  plak overloop
einde


Een C++ programmeur moet dat toch wel naar code kunnen vertalen...

Localhost, sweet localhost


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

waar staat nou de code waar je de lijn afbreekt?

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

offtopic:
Een 'lijn' in het nederlands is wat anders dan een 'regel'. Je topic titel doet iets grafisch vermoeden en dan blijkt dat het gaat om een simpel regel afbreek probleem!


Om even terug te komen op het echte probleem... Je vraagt alleen een hint, dus ehm... die ga ik geven :) .

Hak je regel op in losse woorden. Ga net zolang woorden toevoegen tot je over die 50 tekens grens komt. Als je daar overheen gaat is je string kennelijk te lang en haal je dat laatste woord weer weg. De woorden die overblijven schuiven door naar de volgende regel.

offtopic:
(NOFI)Lekkere ondertitel trouwens... 'C++ programmeur' en dan niet eens zo'n programmaatje kunnen maken!


edit:

En weer royaal te laat natuurlijk...

Verwijderd

Topicstarter
ok hier heb ik wat aan.

Verwijderd

Topicstarter
Verwijderd schreef op 27 september 2002 @ 13:01:
Hak je regel op in losse woorden. EN DAN DIT: (NOFI)Lekkere ondertitel trouwens... 'C++ programmeur' en dan niet eens zo'n programmaatje kunnen maken!
hoe hak ik die zin in woorden en hoe schrijf ik die weg?

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Verwijderd schreef op 27 september 2002 @ 13:07:
[...]

hoe hak ik die zin in woorden en hoe schrijf ik die weg?
Woorden worden in het nederlands gescheiden door spaties, dus daar moet je iets mee doen.

Localhost, sweet localhost


Verwijderd

als je een boek c++ koopt zie je dat daar ook woorden gescheiden worden door spaties, daarnaast staat er vast wel in hoe je moet programmeren dus is het dubbel zo handig boekje :+

  • Biedzjee
  • Registratie: December 2000
  • Laatst online: 14-08-2025
Als je een string in woorden wilt hakken moet je een zg. parsing slag uitvoeren. Als je een goede parser maakt, kan die overweg met spaties, tabs, punten, kommas etc. Dergelijke onderdelen ('.', ',', '\n', ' ') worden tokens genoemd. Als je even zoekt op bv. http://www.codeproject.com dan weet ik zeker dat je hier voorbeeld-code voor zult vinden

Trying to establish voice contact... please yell into keyboard.


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Verwijderd schreef op 27 september 2002 @ 13:10:
als je een boek c++ koopt zie je dat daar ook woorden gescheiden worden door spaties, daarnaast staat er vast wel in hoe je moet programmeren dus is het dubbel zo handig boekje :+
Ten derde kun je er ook muggen mee dood slaan...


bedenk dat een string in c++ een array van lettertjes is... Je moet dus gewoon die array doorlopen

Localhost, sweet localhost


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Waarom werk je met arrays van characters? Een van de verworvenheden van programmeren in C++ is de beschikbaarheid van de STL en de I/O-streams library. Hiermee kun je veel veiliger en eenvoudiger (als je over de juiste kennis beschikt) strings manipuleren.

Je hoeft je dan in ieder geval geen zorgen meer te maken over alloceren en inlezen van geheugen...

  • Biedzjee
  • Registratie: December 2000
  • Laatst online: 14-08-2025
Ik ben niet zo'n C++ freak, meer een C freak. Maar zit er in C++ niet een string standaard class met een 'parse' operator/functie erbij ?

Trying to establish voice contact... please yell into keyboard.


Verwijderd

Ik zat het me ook al af te vragen hij include wel netjes <string> maar gaat vervolgens aan de haal met n char array..

Verwijderd

Topicstarter
Verwijderd schreef op 27 september 2002 @ 13:14:
Ik zat het me ook al af te vragen hij include wel netjes <string> maar gaat vervolgens aan de haal met n char array..
Dat was de vorige opzet van mijn programma, maar we mogen niet met strings werken. Alleen met c-strings.

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 27 september 2002 @ 13:01:
offtopic:
Een 'lijn' in het nederlands is wat anders dan een 'regel'. Je topic titel doet iets grafisch vermoeden en dan blijkt dat het gaat om een simpel regel afbreek probleem!
mijn fout :Y)

Over je probleem: je kunt de pseudo-code van kvdveer uitbreiden door in plaats van af te breken op een bepaald punt eerst even terug te scannen naar de eerstvolgende spatie, en 'm daar af te breken

Wel even rekening houden met het feit dat er misschien wel helemaal geen spaties in staan (heel lang woord), en dan kun je m gewoon afbreken op de maximale regellengte (of eentje minder en dan zet je er een '-' teken achter)

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.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Is het trouwens de bedoeling om continue invoer te verwerken (en uitvoer te genereren) of is de invoer dusdanig beperkt, dat de tekst ook wel in z'n geheel ingelezen kan worden?

Voor een voorbeeldapplicatie kun je trouwens kijken naar de UNIX 'fmt' utillity, die (onder andere) aan word wrapping doet. Eventueel kun je die utillity ook gewoon aanspreken in je applicatie (daar is 'ie tenslotte voor) of er code uit kopieren (als je de BSD source pakt, bijvoorbeeld). Ik neem aan dat 'ie ook wel op niet-UNIX systemen te compileren valt.

Verwijderd

Topicstarter
heb je die bij de hand? (de UNIX 'fmt' utillity')

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49

Verwijderd

Topicstarter
ik kan niet naar ftp-adressen toe. Dat is bij ons uitgeschakeld :(

toch bedankt

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Hij is ook wel via 't web te vinden:
http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/fmt/

Verwijderd

Topicstarter
een nieuw PSD:

zolang niet einde bestand {
lees regel
zolang lengte > 50 {
zoek spatie voor char 50
uitvoer >> kantlijn >> char 0 t/m spatie_char
verwijder tekst t/m spatie
}
}

Verwijderd

Topicstarter
C++:
1
2
3
4
5
6
7
8
zolang niet einde bestand {
    lees regel
    zolang lengte > 50 {
        zoek spatie voor char 50
        uitvoer >> kantlijn >> char 0 t/m spatie_char
        verwijder tekst t/m spatie
    }
}

  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Ik ga even het spelletje verpesten:
http://www.instinct.org/e...d/elm2.5.6/src/wordwrap.c

Localhost, sweet localhost


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

MagicPatrick: je kunt je posts editten met de Afbeeldingslocatie: http://images.tweakers.net/forum/templates/got/images/icons/edit.gif-knop

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
bedankt kvdveer

Verwijderd

Topicstarter
> ik heb de positie van de spatie gevonden en heb die opgeslagen in int position

weten jullie hoe ik van een char-array bijvoorbeeld de eerste 10 karakters pak. (in VB is dat Right(text, 10)

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:58


Waarom doe je het dan niet?

https://fgheysels.github.io/


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

even een schoonmaak gehouden
MagicPatrick: edit je post dan ook, en post niet steeds van die oneliners :{
ook vind ik dat je wel wat meer moeite mag doen hoor, P&W is bedoeld voor mensen die problemen zelf op willen lossen, het is dus geen helpdesk

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
waarom mag dit niet:

C++:
1
 char tmp[] = new char[position];

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:58
Verwijderd schreef op 27 september 2002 @ 13:58:
> ik heb de positie van de spatie gevonden en heb die opgeslagen in int position

weten jullie hoe ik van een char-array bijvoorbeeld de eerste 10 karakters pak. (in VB is dat Right(text, 10)


Ik denk dat je eens de help-functie moet opzoeken.... Daar kun je alle string-handling functies in terug vinden.

Zoals .oisyn al vermeld heeft: P&W is geen helpdesk oid.
Het is een forum om te discussieren over programmeerproblemen en waar we mensen helpen bij het oplossen van hun problemen. Voorwaarde is natuurlijk wel dat die mensen zich zelf ook enige moeite getroosten om de oplossing te vinden en dus actief meezoeken.
Het is ook geen forum waar RTFM (Read The F*ckin Manual) niet toegelaten zijn.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 19:58
Verwijderd schreef op 27 september 2002 @ 14:10:
waarom mag dit niet:

C++:
1
 char tmp[] = new char[position];


Welke fout krijg je? Glazen bollen worden al lang niet meer gemaakt.
Heb je de fout (compiler error) zelf al eens bestudeerd?
Heb je position wel gedefinieerd?

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 20:12

Creepy

Tactical Espionage Splatterer

Magic Patrick: misschien een hint om er eens een C++ boek bij te pakken zoals al is aangeraden. Dan weet je misschien het verschil tussen objecten en built-in typen.
Als je dat niet weet, of niet wilt weten, kan je beter gaan stoppen met programmeren.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 27 september 2002 @ 14:10:
waarom mag dit niet:

C++:
1
 char tmp[] = new char[position];


en nu gooi ik m toch echt op slot :(
koop een C++ boek, of zoek een tutorial, maar hier is P&W niet voor bedoeld

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.

Pagina: 1

Dit topic is gesloten.