Toon posts:

[c++] ' " ' teken overslaan in memo's

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb weer een probleempje :|

Het probleem is dat ik een String laat afdrukken in een memo of editbox.
Zoals je op het screenshot kunt zien ziet dat er niet uit; is er een optie om het ' " ' teken over te slaan / verbergen?
Of; kan ik simpel het eerste en laatste teken verwijderen zonder de String in een array oid te plaatsen?

Ik werkt met Borland C++ Builder v5

Screenshot

Verwijderd

waarom stop je die " dan in die string in de eerste plaats...?

  • Bigs
  • Registratie: Mei 2000
  • Niet online
Zoiets?

code:
1
2
3
4
5
6
7
8
9
10
11
// SearchNReplace replaces this with that
void SearchNReplace(AnsiString *Buffer, AnsiString This, AnsiString That) {
  int len = This.Length();
  int loc = Buffer->Pos(This);

  while (loc) {
    Buffer->Delete(loc, len);
    Buffer->Insert(That, loc);
    loc = Buffer->Pos(This);
  }
}


(en dan dus de " vervangen door niks)

Verwijderd

Topicstarter
Verwijderd schreef op 14 November 2002 @ 16:07:
waarom stop je die " dan in die string in de eerste plaats...?
Het is een backup bestand van Girotel; daar worden bepaalde gegevens dmv. " , " gescheiden; maar ze gebruiken ook ' " '.
Die laatste lees ik dus ook in terwijl ik dat eigenlijk niet wil.

Verwijderd

Topicstarter
Bigs schreef op 14 November 2002 @ 16:08:
Zoiets?

code:
1
2
3
4
5
6
7
8
9
10
11
// SearchNReplace replaces this with that
void SearchNReplace(AnsiString *Buffer, AnsiString This, AnsiString That) {
  int len = This.Length();
  int loc = Buffer->Pos(This);

  while (loc) {
    Buffer->Delete(loc, len);
    Buffer->Insert(That, loc);
    loc = Buffer->Pos(This);
  }
}

(en dan dus de " vervangen door niks)
Dankje wel.... alleen snap ik het niet helemaal.

Je hebt als input AnsiString This & AnsiString That, AnsiString That zou toch ipv de void moeten komen :? Het is toch immers een output?

En verder; wat gebeurd er eigenlijk met de pointer?, ik zie niet helemaal wat de code allemaal doet :)

Verwijderd

Ik kan er niets aan doen, maar het feit dat je die " inleest en niet gebruikt waarvoor ie bedoeld is (namelijk om strings waar een komma in voorkomt te kunnen opslaan) doet mij vermoeden dat je daar een heeeeel erg brakke inleesroutine hebt.

  • Bigs
  • Registratie: Mei 2000
  • Niet online
Je gebruikt hem als volgt:

code:
1
2
AnsiString String;
SearchNReplace(&String,"\"", "");

Nu ik er bij na denk is het misschien helemaal niet eens nodig om een pointer te gebruiken voor die string.

loc bevat gewoon altijd de volgende locatie van 'this' in de string, als het niet meer voorkomt geeft die Buffer->Pos functie 0 terug en dan wordt de lus dus gestopt.

Wat Qlone zegt is trouwens ook wel waar ;)

Verwijderd

joh, gebruik gewoon de STL string, kan je die meuk er lekker simpel tussenuit raggen..

Verwijderd

Of als je Microsoft freak bent, gebruik dan de CString van microsoft.. :)

Verwijderd

Topicstarter
Ok, misschien niet de mooiste oplossing; maar het werkt:

C++:
1
2
3
4
string string1 = "Even lekker testen";
int len = string1.size();

string string2 (string1,1,((len-1)-1));

Verwijderd

code:
1
string string2(string1, 1, string1.size() - 2);


Het leesbaar maken van je code is al de helft minder bugs. Lekkere code trouwens als je string1 maar een lengte heeft van 1 teken ofzo... heb je opgezocht in de standaard hoe de library om hoort te gaan met negatieve lengtes?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

Beetje vieze oplossing. Je moet tijdens het inlezen alles tussen de " pakken, maar niet de " zelf. Wat jij nu waarschijnlijk doet is alles tussen komma's pakken, maar dan heb je kans dat er ook spaties tussen zitten

C++:
1
2
3
4
string voorbeeld = "  \"blaat\"  ";
string::size_type pos1 = voorbeeld.find ('"');
string::size_type pos2 = voorbeeld.find ('"', pos1 + 1);
string resultaat (voorbeeld, pos1 + 1, pos2 - pos1 - 1);


(ervanuitgaande dat er 2 quotes in staan)

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

Mooi hoor. Zoals ik al eerder zei, maar waar ik toverstaf nog geen reaktie op heb zien geven is dat die "'s er niet in staan voor een reden. Toverstaf zei dat de velden gescheiden werden door een komma, en dat er soms "'s gebruikt worden.
Zowel toverstaf's als .oisyn's oplossing lopen fout op een string die er bijvoorbeeld als volgt uit ziet:

1, 3, 8, apenootje, saldo, "Janssen, A", 4

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:21

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 14 November 2002 @ 18:15:
Zowel toverstaf's als .oisyn's oplossing lopen fout op een string die er bijvoorbeeld als volgt uit ziet:

1, 3, 8, apenootje, saldo, "Janssen, A", 4


klopt idd, maar ik ga niet voor hem een kant en klare oplossing schrijven ;)

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.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Verwijderd schreef op 14 november 2002 @ 16:39:
Of als je Microsoft freak bent, gebruik dan de CString van microsoft.. :)
Verwijderd schreef op 14 november 2002 @ 16:39:
joh, gebruik gewoon de STL string, kan je die meuk er lekker simpel tussenuit raggen..
Als je niks zinnigs te melden hebt, zeg dan niets. Fyi heeft de topicstarter al gemeld dat ie in BCB5 bezig is met een VCL applicatie, en VCL heeft een perfect functionele AnsiString class:
C++:
1
2
AnsiString l_Input = "\"              STOMME TEST         \"";
AnsiString l_Stripped = l_Input.SubString(2, l_Input.Length() - 2).Trim();

Professionele website nodig?


Verwijderd

Topicstarter
Oké, ben ik weer :)
Even de antwoorden op de vragen + opmerkingen.

De reden waarom die ' " ' ertussen staan weet ik niet :)
Het probleem is als volgt: je kunt bij Girotel Online een backup maken van de afschrijvingen van de opgegeven periode.

In dat bestand staan alle afschrijvingen van die opgegeven periode op 1 regel appart, dus 1 regel is 1 overschrijving.
Een overschrijving ziet er ongeveer zo uit:
code:
1
88882218,"20021030","DV",1,0,"KN: 0099006400196441","",232.64,"A","M","2E TERMIJN COLLEGEGELD STUDIEJAAINCASSO                         HOGESCH ARNHEM/ NIJMEGEN                                                                        ","EUR"


Je ziet dat het allemaal een beetje een zooitje is; maar het is toch allemaal redelijk simpel te scheiden.

Dan dat stukje code + opmerking van Qlone:

code:
1
string string2(string1, 1, string1.size() - 2);


Ik weet ook wel dat je beter -2 kunt gebruiken; maar -1 -1 is makkelijker te zien waarom het -2 moet zijn.

En dan volgens mij de laatste opmerking dat je een negatief getal zou kunnen creëren; dat kan niet !
Waarom niet? Omdat de code alleen wordt gebruikt voor reeksen waarvan ik de grootte al weet; en een rekeningnummer van 1 cijfer bestaat niet.
Wanneer er bijvoorbeeld toch 1 cijfer als rekeningnummer wordt gebruikt; dan krijgt de gebruiker al een melding bij het openen van het bestand.
De foutcontrole gebeurd dus al eerder.

En waarom deze "niet nette" oplossing?
Die gebruik ik omdat het geheel voor een eindopdracht (maar vooral voor mijn vader ;) ) is. Ik wil eigenlijk alleen de methodes gebruiken die ik tot nu toe heb geleerd; ik wil niet te snel gaan.

Maar het werkt... voor zover ik kan oordelen :)

Bedankt !

Verwijderd

En dan volgens mij de laatste opmerking dat je een negatief getal zou kunnen creëren; dat kan niet !
Waarom niet? Omdat de code alleen wordt gebruikt voor reeksen waarvan ik de grootte al weet; en een rekeningnummer van 1 cijfer bestaat niet.
Dat kan in dit geval prima werken, maar ik zie 't te vaak voorkomen in (commerciele) software van mensen die toch beter moeten weten dat een heel kleine fout in de invoer of iets anders 'onverwachts' het hele programma doet crashen... Overal foutcontrole en NERGENS aannames maken is een goede gewoonte :) .

Verwijderd

curry684 schreef op 14 november 2002 @ 18:28:
[...]


[...]

Als je niks zinnigs te melden hebt, zeg dan niets.
Sorry hoor, maar STL lijkt me altijd een vrij *zinnige* oplossing.
(Als je niet weet wat het is, zeg dan niks ;))

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 09-01 11:25

D2k

Verwijderd schreef op 15 November 2002 @ 11:29:
[...]


Sorry hoor, maar STL lijkt me altijd een vrij *zinnige* oplossing.
(Als je niet weet wat het is, zeg dan niks ;))

anders ga je ff ergens anders trollen
not in my backyard iig

kortom, doe normaal

Doet iets met Cloud (MS/IBM)

Pagina: 1