UTF8 nach ASCII

Anfängerfragen zum Programmieren mit PureBasic.
DarkCrow
Beiträge: 18
Registriert: 04.01.2005 16:35
Wohnort: Altrip
Kontaktdaten:

UTF8 nach ASCII

Beitrag von DarkCrow »

Hallo PBler,

ich wollte eine Datei vom UTF8 nach ASCII konvertieren, leider funktioniert mein "Konstrukt" nicht wie gewünscht, denn es gibt mir kein ASCII zurück.

Hier mein Code:

Code: Alles auswählen

Procedure UTF8toASCII(file_name$)
  in = ReadFile(#PB_Any, file_name$)
  out = CreateFile(#PB_Any,file_name$ + ".ASCII." + GetExtensionPart(file_name$))
  If in And out
    While Eof(in) = 0
      *mem = AllocateMemory(1048576)
      text$ = ReadString(in, #PB_UTF8)
      PokeS(*mem, text$, Len(text$), #PB_UTF8)
      text$ = PeekS(*mem, -1, #PB_Ascii)
      WriteStringN(out,text$,#PB_Ascii)
    Wend
    CloseFile(in)
  EndIf
EndProcedure
Bin ich auf dem richtigen Weg? Oder wie würdet ihr sowas machen?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Alles was ASCII ist in UTF-8, liegt dort auch so vor. Der Rest ist nicht
in ASCII vorhanden, also wozu die Wandlung?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
DarkCrow
Beiträge: 18
Registriert: 04.01.2005 16:35
Wohnort: Altrip
Kontaktdaten:

Beitrag von DarkCrow »

Hmm, das stimmt, mein Problem ist, dass ich, wenn ich mit UEStudio per Konvertieren\UTF8 nach ASCII die Datei konvertier, die Datei einwandfrei mit meinem Delphi Programm verarbeiten kann.

Ich werd mal schauen, warum es nach der Konvertierung geht und vorher nicht.

Danke.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ansonsten sollte es so reichen :wink:

Code: Alles auswählen

Procedure UTF8toASCII(file_name$)
  Protected in.l = ReadFile(#PB_Any, file_name$)
  Protected out.l = CreateFile(#PB_Any,file_name$ + ".ASCII." + GetExtensionPart(file_name$))
  If in And out
    ReadStringFormat(in)
    While Not Eof(in)
      text.s = ReadString(in, #PB_UTF8)
      WriteStringN(out, text.s, #PB_Ascii)
    Wend
    CloseFile(in)
    CloseFile(out)
  EndIf
EndProcedure
text.s erhält automatisch ASCII wenns eine ASCII exe ist, bzw. UNICODE
wenns eine UNICODE exe ist, was anderes kann PB als String sowieso
nicht verarbeiten, nur im Speicher.

Strings haben immer das Format der Exe!!!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

*anmerk*
wenn das öffnen einer der dateien fehlschlägt, wird die andere nicht geschlossen.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

#NULL hat geschrieben:*anmerk*
wenn das öffnen einer der dateien fehlschlägt, wird die andere nicht geschlossen.
Was dann ja auch nicht so wichtig ist, da man nicht mehr drauf zugreift.
Prüfen ist wichtig, aber übertreiben muß man es nicht auch noch, sonst
fängt jede Zeile mit If an :freak:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Es gibt in meinen Augen wenig, was wichtiger ist, als prüfen. Und die beiden Closefile() mit ner If-Anweisung aus der Schleife zu nehmen ist ja auch nicht so tragisch. Aus meiner Sicht sind wir noch Meilen entfernt von "übertreiben".
Optimismus ist ein Mangel an Information.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Da die Dateien in diesem Falle nicht genutzt werden, reicht der Hinweis aus der Hilfe:
PureBasic.chm hat geschrieben:Hinweis: Am Programmende ist PureBasic "klug" genug, um alle offenen Dateien automatisch zu schließen. Deshalb müssen Sie dies nicht unbedingt selbst erledigen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Hellhound66
Beiträge: 476
Registriert: 23.03.2005 23:19

Beitrag von Hellhound66 »

Da die Dateien in diesem Falle nicht genutzt werden, reicht der Hinweis aus der Hilfe:
Weisst du es?
Könnte sein, dass die Datei während der Laufzeit nochmal erstellt wird, dann ist es zum Scheitern verurteilt.
Optimismus ist ein Mangel an Information.
Benutzeravatar
#NULL
Beiträge: 2237
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@ts-soft
da steht nur eine prozeduren-definition. die proc wird nicht aufgerufen, also kann man reinschreiben was man will, ist immer sicher, das 'programm'.
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten