Torna indietro   Hardware Upgrade Forum > Software > Programmazione

 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP
OPPO ha appena lanciato sul mercato la nuova serie Find X10, che ha come smartphone premium il Find X10 Pro Max, uno smartphone completo, che fa del comparto fotografico il suo vero punto di forza. Ma sono tante le novità, tra cui l'AI che adesso diventa agentica. Ma andiamo a vedere nel dettaglio questo nuovo smartphone.
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato
Abbiamo provato la beta di World of Warcraft: Forever, il Classic+ di Blizzard in arrivo il 4 novembre: la nuova razza Skyborne restituisce la sensazione di un gioco nuovo, ma le zone storiche conservano la noia divertita di Classic. Classi ribilanciate, sciamani anche nell'Alleanza e un motore grafico che in 4K gira bene anche su una RTX 3070. Cosa cambia in Forever? La risposta nell'articolo
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita
TCL P80 Ultra abbina per la prima volta un pannello AMOLED alla tecnologia NXTPAPER con finitura opaca, affiancandoci una fotocamera periscopica da 50 MP con zoom ottico 3x, il SoC Dimensity 7400 Elite e una batteria da 5.800 mAh. Nella prova sul campo emergono luminosità di picco molto elevata, comparto fotografico solido per la fascia di prezzo e autonomia nella media, a fronte di velocità di scrittura dello storage piuttosto contenute
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 20-04-2009, 18:52   #1
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
[C++]Sostituzione di parole accentate. Perchè non funziona?

Salve,
stavo sperimentando con la classe string ma non riesco a capire perchè questa funzione presa da "Practical programming" di bruce Eckel non funziona.
Faccio leggere un file contenente delle frasi e deve sostituirmi "è caldo" con "is hot";
Non accade nulla perchè non riesce a leggere la "è" e quindi non sostituisce tutto.
Funziona invece per altre stringhe.
Se possibile non vorrei copiare l'oggetto string in un array.


Codice:
#include <iostream>
#include <fstream>
#include <string>
#include "ReplaceAll.h"

using namespace std;

int main()
{

ifstream ingresso("in.txt");
string s;
string temp;
while (getline(ingresso, s))
{
    cout<<s;
    temp=temp+s;

    }

ingresso.close();


replaceAll(temp,"è caldo","is hot");
ofstream uscita("exit.txt");
uscita<<temp;

uscita.close();

    system ("pause");
    return 0;
}


Codice:
//: C03:ReplaceAll.cpp {O}
//#include <cstddef>
#include "ReplaceAll.h"
using namespace std;

string& replaceAll(string& context, const string& from, const string& to)
{
size_t lookHere = 0;
size_t foundHere;

    while((foundHere = context.find(from, lookHere))!= string::npos)
    {
    context.replace(foundHere, from.size(), to);
    lookHere = foundHere + to.size();
    }
return context;
} ///:~
Codice:
#include <string>

std::string& replaceAll(std::string& context,
const std::string& from, const std::string& to);

Ultima modifica di limpid-sky : 20-04-2009 alle 18:59.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2009, 19:32   #2
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
sembra essere un problema legato a unicode. ma come posso fare per risolverlo?
poichè in inglese le lettere accentate non ci sono quella funzione va bene per l'inglese ma non per l'italiano.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 20-04-2009, 21:03   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da limpid-sky Guarda i messaggi
sembra essere un problema legato a unicode. ma come posso fare per risolverlo?
salvando il txt in formato ANSI
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 00:12   #4
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
Quote:
Originariamente inviato da 71104 Guarda i messaggi
salvando il txt in formato ANSI
Grazie di aver risposto.
sono ignorante come si fa?
o almeno indicami dove vedere.
Per salvare correttamente secondo in ANSI come devo fare?.

Ultima modifica di limpid-sky : 21-04-2009 alle 01:33.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 10:14   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da limpid-sky Guarda i messaggi
Grazie di aver risposto.
sono ignorante come si fa?
o almeno indicami dove vedere.
Per salvare correttamente secondo in ANSI come devo fare?.
aprilo con Blocco Note, scegli "Save As..." dal menu File e nella casella "Encoding" seleziona "ANSI".
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 10:34   #6
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
Ah intendevi questo.
Per crearlo in questo modo dal terminale del C++ non esiste nulla?

Ultima modifica di limpid-sky : 21-04-2009 alle 10:41.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 10:54   #7
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
come posso fargli sostituire ste benedette parole accentate.
Sto impazzendo.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 12:20   #8
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
Forse usando visual c++ e qualche libreria di windows si può fare più rapidamente?
Volevo capire il perchè questo sistema non funziona. Cioè non riesco a capire perchè non legge il carattere "è". Da quello che ho capito sbattendoci la testa fino ad ora è che il carattere "è" non è contenuto nell'ascii standard ma in quello esteso. Essendo il file del blocco note scritto in Ansi forse c'è una relazione tra le due cose.

Una possibile soluzione sarebbe passare per il C.
Copiare una riga dal file in una stringa del C.
vedere carattere per carattere se trova il carattere "è"
Se lo trova sostituirlo con una coppia di caratteri "is"
Ricalcolare la lunghezza della stringa e shiftare tutto.
Insomma una bella porcata.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2009, 20:40   #9
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
UP
Un indicazione?
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 16:24   #10
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
nessuna soluzione?
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2009, 22:50   #11
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da limpid-sky Guarda i messaggi
nessuna soluzione?
Come hai creato il documento "in.txt"?
Se è in formato UTF8 (e assai probabilmente lo è altrimenti il tuo codice doveva funzionare) dovrai usare MultiByteToWideChar usando come code page CP_UTF8 e usare wchar_t e derivati oppure iconv sotto Linux.

Altrimenti dovresti usare setlocale ma a quanto mi risulta nessun Visual Studio può impostare l'UTF8 come locale (solo VS2003 apparentemente ci riusciva ma era solamente un bug, che dovevano risolvere in VS2005, ma che è ancora prensente in VS2008...), non mi è mai capitato il problema sotto linux perciò non saprei se un setlocale(".65000") è sufficiente.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 08:39   #12
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Al limite puoi appoggiarti a wcstombs() per la conversione UTF-8 → ANSI e mbstowcs() per la conversione ANSI → UTF-8, mi sembra che sia standard per il C99.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 12:15   #13
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Al limite puoi appoggiarti a wcstombs() per la conversione UTF-8 → ANSI e mbstowcs() per la conversione ANSI → UTF-8, mi sembra che sia standard per il C99.
La faccenda è più complicata: wcstombs/mbstowcs convertono da e verso UCS-2, per usare i codepage c'è bisogno di affidarsi a librerie non incluse nello standard (C e C++).
Anche boost ha qualche classe per la gestione dell'utf8 ma non l'ho mai usata.

Nel caso in questione la conversione deve essere molto probabilmente da UTF-8 a Windows-1252 (o ISO-8859-15)
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 12:24   #14
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
non si fa prima a risalvare il file txt?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 12:54   #15
DanieleC88
Senior Member
 
L'Avatar di DanieleC88
 
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
Quote:
Originariamente inviato da tomminno Guarda i messaggi
La faccenda è più complicata: wcstombs/mbstowcs convertono da e verso UCS-2, per usare i codepage c'è bisogno di affidarsi a librerie non incluse nello standard (C e C++).
Anche boost ha qualche classe per la gestione dell'utf8 ma non l'ho mai usata.

Nel caso in questione la conversione deve essere molto probabilmente da UTF-8 a Windows-1252 (o ISO-8859-15)
Hmm, sei sicuro? Non riesco a trovare nessuna informazione che confermi, ma nemmeno che smentisca.
__________________

C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai!
DanieleC88 è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 14:03   #16
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da DanieleC88 Guarda i messaggi
Hmm, sei sicuro? Non riesco a trovare nessuna informazione che confermi, ma nemmeno che smentisca.
Direi sicuro al 99.9%.
Il problema dei Code Page è decisamente una delle cose per cui il C++ fornisce scarsissimo supporto, supporto invece fornito semplicissimamente dal .NET (tra l'altro a vedere il codice della classe Encoding direi che hanno fatto il porting di qualcosa scritto in C, visto che è pieno di puntatori e goto).
Sono queste le cose che fanno apprezzare un linguaggio con una grossa libreria standard altro che la gestione automatica della memoria...

Comunque dicevo wcstombs/mbstowcs utilizzano per le conversioni il codepage definito nel programma tramite le apposite funzioni C/C++ (locale/setlocale).
Il problema è che per l'appunto i compilatori Microsoft non sono in grado di impostare come Code Page l'UTF8 e quindi le funzioni standard non possono essere usate (non conosco altrettanto bene altri compilatori per Windows, ho usato il compilatore Intel solo per applicazioni scientifiche dove non c'erano di questi problemi).

Invece le funzioni del sistema operativo (MultiByteToWideChar/WideCharToMultiByte) consentono di specificare un code page specifico per le conversioni.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 14:11   #17
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da 71104 Guarda i messaggi
non si fa prima a risalvare il file txt?
Quello sicuramente.
Ma metti che (non so se questo è il caso) il programma debba elaborare file scritti da un applicativo .NET (che di default usa UTF8), o modifichi il programma .NET per fargli scrivere in un code page differente o devi adattare la lettura
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 16:40   #18
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
Ma il file txt di origine viene generato dal programma in c++ con l'istruzione ofstream quindi non so come lo salva.

Vi dico quello che il programma fa. Apre un file html ne fa il parsing e ne estrae il testo che viene salvato in un file con l'istruzione ofstream. A partire da questo file che viene riaperto il lettura vengono sostituite delle stinghe contenenti la "è" con stringhe in inglese. Tutto qua.
Ho anche provato a fare un file in txt e salvare in ansi ma il problema si presenta lo stesso e le stringhe contententi "è" non vengono sostituite.
Per esempio non viene sostituita la stringa "domani è" "con tomorrow is".
Forse ora è + più chiaro.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 16:51   #19
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da limpid-sky Guarda i messaggi
Vi dico quello che il programma fa. Apre un file html ne fa il parsing e ne estrae il testo che viene salvato in un file con l'istruzione ofstream. A partire da questo file che viene riaperto il lettura vengono sostituite delle stinghe contenenti la "è" con stringhe in inglese. Tutto qua.
E il file html da dove viene? Potrebbe aver benissimo essere specificato un encoding UTF8.

Hai guardato in debug cosa vedi al posto dei caratteri accentati quando leggi l'html?

Quote:
Ho anche provato a fare un file in txt e salvare in ansi ma il problema si presenta lo stesso e le stringhe contententi "è" non vengono sostituite.
Per esempio non viene sostituita la stringa "domani è" "con tomorrow is".
Forse ora è + più chiaro.
Questo è strano io ho provato il codice che hai postato te e funziona con caratteri accentati, se il file non è UTF8.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 23-04-2009, 16:56   #20
limpid-sky
Senior Member
 
L'Avatar di limpid-sky
 
Iscritto dal: Aug 2004
Messaggi: 1703
non so usare bene tutti gli strumenti e le mie conoscenze non sono così approfondite. cmq se riesco cerco di postarvi il codice o il file da cui vorrei leggere.
In visual c++ ho realizzato questo.
Praticamente è un programmino che legge la chat di gioco digitale in formato html e ne estrae il testo in html salvandolo in un file .
http://support.microsoft.com/kb/249232

Da questo file poi volevo farmi un programmino a console con codeblocks che traduca frasi del tipo "Il river è" con "***RIVER***" oppure "Il flop è:" con "***FLOP***"

Ultima modifica di limpid-sky : 23-04-2009 alle 16:58.
limpid-sky è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
WoW Forever provato: il MMORPG che la community chiedeva da anni è arrivato WoW Forever provato: il MMORPG che la community ...
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita TCL P80 Ultra: con un display AMOLED opaco &egra...
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
iPhone Duo, il compromesso del display p...
Reolink OMVI 2i Ultra, la videocamera ib...
PowerToys 0.102: con un nuovo tool il mo...
Bose acquisisce Skullcandy per raggiunge...
I videogiochi di Star Wars dovranno sorp...
Cos'è Flint: l'AI locale per la programm...
Perplexity Computer ora gira offline sul...
LG lancia in Italia i nuovi laptop gram ...
Spotify dice addio ai vincoli di Android...
Leica Q3 43 Formula 1: carbonio, Microve...
Quattro nuovi smartphone e tablet da HON...
Xiaomi Redmi Note 17 in offerta su Amazo...
Fastweb + Vodafone potenzia il supercomp...
Europa e Taiwan uniscono le forze: nasce...
Pixel 9, Google estende di un anno il se...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 16:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v