Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 21.12.22 - klo:22.26
-
Kopsasin tiliotteeni tekstin pankin sivulta tekstinmuokkaimeen ja sitten haluaisin poistaa välilyönnin luvusta
1 300,00 (kopsattu päätteestä omasta ohjelmastani)
Mutta kun omassa ohjelmatekstissäni on tämän luvun käsittelyyn koodia
std::cout << "s33 raaka on " << s33 << std::endl;
s33.erase(remove(s33.begin(), s33.end(), ' ' ), s33.end() );
std::cout << "s33 ilman tyhjää on " << s33 << std::endl;
niin toivoisin sen välilyönnin luvusta 1 300 poistuvan.
Kuitenkin ohjelman aputulostukset ovat tällaiset
s33 raaka on 1 300,00
s33 ilman tyhjää on 1 300,00
Muistikuvani on vielä sellainen, että joskus aikaisemmin ohjelma olisi todella poistanut välilyönnin luvusta. Onko välilyönniltä näyttävä merkki mahdollisesti jokin muu merkki, vaikuttaisiko kopiontitapahtuma jotenkin asiaan, ehkä utf-8 ja char-ristiriitaisuuksia?
-
Kopsasin tiliotteeni tekstin pankin sivulta tekstinmuokkaimeen ja sitten haluaisin poistaa välilyönnin luvusta
Ne pankit, joiden verkkopankin olen nähnyt, tarjoavat kaikki erikseen tapahtumaluettelon (itse valitulta ajalta) csv-muodossa, jolloin niitä välilyöntejä ei ole. Onko sinulla pankki joka tarjoaa vain tiliotteen eikä tapahtumaluetteloa ollenkaan, vai onko sinulla pankki joka tarjoaa tapahtumaluettelon sellaisessa muodossa, että siinä on välilyönnit mukana?
-
Muistikuani on vielä sellainen, että joskus aikaisemmin ohjelma olisi todella poistanut välilyönnin luvusta. Onko välilyönniltä näyttävä merkki mahdollisesti jokin muu merkki, vaikuttaisiko kopiontitapahtuma jotenkin asiaan, ehkä utf-8 ja char-ristiriitaisuuksia?
On mahdollista, että väli on jokin erikoismerkki. Pystytkö laittamaan tänne liitteeksi esimerkkitiedoston, jossa ongelma esiintyy? Tai voit itsekin tutkia sisältöä heksaeditorilla tai hexdumpilla:
hexdump -C tiedosto.txt
Sinänsä koodin pitäisi toimia, jos väli on väli (ASCII-koodi 32 eli 0x20). Testasin tällaisella ohjelmalla:
#include <iostream>
#include <algorithm>
int main(int argc, char *argv[]) {
if (argc < 2) {
std::cout << "usage: " << argv[0] << " <string>\n";
return 0;
}
std::string s33(argv[1]);
std::cout << "s33 raaka on " << s33 << std::endl;
s33.erase(remove(s33.begin(), s33.end(), ' ' ), s33.end() );
std::cout << "s33 ilman tyhjää on " << s33 << std::endl;
return 0;
}
g++ -Wall -std=c++14 -o removespace removespace.cpp
./removespace '1 300,00'
s33 raaka on 1 300,00
s33 ilman tyhjää on 1300,00
-
Kopsasin tiliotteeni tekstin pankin sivulta
Minulta jäi huomaamatta tuo "kopsasin" -- ajattelin tiedoston latausta. Niinpä nm on varmasti oikeassa.
On mahdollista, että väli on jokin erikoismerkki.
Näin minullekin on käynyt yhdessä pankissa, joka ei tarjonnut tapahtumaluetteloa erikseen tiedostona.
-
Ainakin tämä tiliote näyttää toimivan, kun erasea vähän muutetaan. Numeroiden väli ei olekaan tekstinmuokkaimen tiedostossa ainoastaan yksi erikoismerkki vaan kaksi.
Onnistuin poistamaan ne näillä
s33.erase(remove(s33.begin(), s33.end(), char(194) ), s33.end() );
s33.erase(remove(s33.begin(), s33.end(), char(160) ), s33.end() );
Apua etsinnässä oli sivuista
https://onlinestringtools.com/convert-string-to-ascii
https://www.asciitable.com/
tosin jölkimmäinen ei oikeastaan ehkä olekaan tarpeellinen
Tiliotteessa on html sivulta kopsattuna siis välilyönnin sijasta ne omituiset merkit, mutta muuten numerot ovat numeroita ja kirjaimet kirjaimia koodimuuntimen mukaan. Vähän ihmetyttää, miksi välilyönti ei voi olla välilyänti html sivullakin ?? Mihin näillä omituisilla merkeillä pyritään??
Kiitos neuvoista, taas tämäkin näyttää ainakin ratkenneen :)
-
Vähän ihmetyttää, miksi välilyönti ei voi olla välilyänti html sivullakin ?? Mihin näillä omituisilla merkeillä pyritään??
Todennäköisimmin kyse on ns. sitovasta välilyönnistä, eli tyhjästä, jonka kohdalla tekstin (tässä tapauksessa numeron eri osien) jako eri riveille on estetty.
Nettisivulle sen saa kirjoittamalla HTML-koodiin
ja LibreOffice:ssa yms. ohjelmissa se löytyy valikosta tyyliin Lisää / Muotoilumerkki / Sitova välilyönti.