Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Speichern in eine Textdatei

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
23.11.2006, 08:42 Uhr
~Marcosan
Gast


Hallo Community

Nach längerem suchen stelle ich meine Fragen hier doch einmal ein in der Hoffnung, es kann mir jemand einen Tipp geben, wie ich bei meinem Programm weiterkomme.

Ziel ist es, Daten die von einem Scanner kommen, in ein Text File zu speichern. Datensatz um Da-tensatz. Die Funktion funktioniert soweit, das Problem vermute ich bei der von mir erstellten Speiche-rung der Daten.
Folgende Probleme habe ich beim unten angefügten Code.
1. Text „anfügen“
Der vom Scanner eingelesene Text wird zwar in der Datei gespeichert, er überschreibt aber den alten Inhalt. Eigentlich sollte der Text auf einer neuen Zeile im Textfile angefügt werden.
2. dynamische Länge der Daten die eingelesen werden.
WriteFile (hFile,g_pszTextLabel,20,&Readd, NULL); die 20 sollte durch den dynamischen Wert in nTextLength ersetzt warden. Setze ich nTextLength anstelle der 20 ein, so wird nur 50% der Daten in g_pszTextLabel gespeichert.
3. Zeinenumbrüche
Ich würde gerne in einem String einen Zeilenumbruch in die Textdatei speichern. Aber weder \n noch andere Formatierungen die mir bekannt sind, scheinen zu gehen.


C++:
void ThisProgram_UpdateTextLabel(void)
{
HANDLE hFile;
DWORD Readd;
hFile = CreateFile(_T("/My Documents/test.txt"),
            GENERIC_WRITE, 0, NULL,
            OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); // File erstellen

    g_bNewCode = true;
        
    ThisProgram_DeinitTextLabel();

    //Datem vom Scanner empfangen
    size_t nTextLength = g_oScanner.getLabelTextLength();

    if (nTextLength>0)
    {
        g_pszTextLabel = new TCHAR [nTextLength+1];
        if (g_pszTextLabel != NULL)
        {
            g_oScanner.getLabelText(g_pszTextLabel, nTextLength);
            g_pszTextLabel[nTextLength] = _T('\0');
            // Daten in Datei speichern            
            WriteFile (hFile,g_pszTextLabel,20,&Readd, NULL);  
// Statischer WERT 20 durch dynamischen ersetzen
        }
    }
// Speicherfile schliessen
CloseHandle (hFile);
}


Das Gerät auf dem das Programm laufen wird findet man hier:
www.datalogic.de/_vti_g2_p_det.aspx?idp=e7a3ea6d-c1b8-40ed-bfda-9009003187ac&rpstry=17_

Sind zwar gleich 3 Fragen auf einmal, bin aber für jeden Hinweis froh, der mich etwas weiterbringt bei meinem kleinen Programm.

Dieser Post wurde am 25.11.2006 um 15:10 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.11.2006, 12:09 Uhr
Multi



lol
so eine abspeicher möglichkeit hab ich noch nie gesehen

ich kenn nur fopen von cstdio.h
1. frage wen du fopen benutzten würdest könnte ich dir sagen(tippen), dass man mit a . etwas mit einfügt (a <=> add bla bla blub) fopen(FILE, "blabla", a) oder so
. IDEE habe gerade eine idee (was für wunder) es könnte sein (wenn ich das oben . . im quellcode nicht überlesen haben sollte) ,dass du die datei die du angelegt hast . . . erst einlesen musst und dann infügen
2. frage /* spannungs aufbau durch luftholen 2 sec. warten*/ .. .. , - , KeiNe AhNung!1!
3. frage hast du schon eimal \eof ausprobiert (keine ahnung ob das hilft(\eof signalisiert . eigentlich das ende))
--
Microschrott präsentiert
Windoof SE Natiol
jetzt sofort den Mega-Bundle bestellen
mit der stylischen 3Tasten Tastartur
(Strg, Alt, Entf)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.11.2006, 15:11 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

lol
so eine abspeicher möglichkeit hab ich noch nie gesehen


Das heisst ja noch lange nicht das es diese nicht gibt...


Am günstisgten wäre es, wenn es für deinen Scanner schon eine Library gibt, mit der du den Scanner über c/c++ ansprechen kannst. Ich würde erstmal in der Richtung weiter suchen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.11.2006, 10:43 Uhr
Marcosan



Danke für die Anworten.

Die Bibliothek des Scanners umfasst leider nur Funktionen für das, was der Scanner können muss. (also einlesen von Strichcode)

Die Weiterverarbeitung der Daten liegt dann alleine beim Programmierer wobei er, nach meinem aktuellen Wissensstand, nicht die gängigen C++ Funktionen wie foben oder iostream benützen kann, sondern auf die speziell von MS geschaffenen Funktionen zurückgreifen muss. So entstand auch mein eher unüblicher Ansatz, die Daten in einem Text File zu speichern.

Da ich in der Zwischenzeit auch nicht untätig war hier einmal meine Erkenntnisse für die einzelnen Fragen:

1. Um die Daten "anzufügen" muss man den Filepointer an das Ende der Datei verschieben.
Dazu gibt es eine Funktion SetFilePointer(). Ob es klappt, konnte ich noch nicht testen.

2. bei der Dynamischen Länge des Strings ist mir selber ein Fehler unterlaufen. Ich habe TCHAR wie ein CHAR behandelt was natürlich nicht möglich ist.

3. noch keine Idee oder Lösung in Sicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.11.2006, 11:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Die Bibliothek des Scanners umfasst leider nur Funktionen für das, was der Scanner können muss. (also einlesen von Strichcode)


Na das ist ja schon mal die halbe Miete wenn das geht.

Man muss eigetnlich nur verstehen wie das Array (oder welche Struktur auch immer) das der Scanner befüllt zu interpretieren ist, der Rest ist dann ja nicht mehr weiter schwer.

vom Prinzip her würde ich mir nicht die WINAPI Funktionen zum Dateien befüllen ans Bein binden sondern std::ofstream verwenden...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.11.2006, 11:35 Uhr
Marcosan



Wollte schon ofsteam (etc.) verwenden, die Entwicklungsumgebung quittiert mir den Versuch aber mit dem Fehler, die Funktion oder die entsprechenden Header Dateien nicht zu kennen.

Bin mir so nicht sicher ob ich die Funktionen nun einfach dazukopieren kann und das dann läuft...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.11.2006, 11:38 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



C++:
#include <iostream>
#include <fstream>

.
.
.


std::ofstream(....)



sollte er eigentlich fressen... zeig mal code was bei dir nicht geht...

am besten wäre vermutlich wenn du ggf. einfach mal ein paar Worte dazu verlierst wie die Datenstruktur aussieht und wie diese zu interpretieren ist die du ins File schreiben willst und wie du dir die Filestruktur vorstellst...

Dann kann dir hier garantiert geholfen werden... So ist das ja ein raten ins Blaue...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 27.11.2006 um 11:41 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.11.2006, 11:57 Uhr
Marcosan



Wenn ich #include <iostream> einfüge bekomme ich folgende Fehlermeldung:
Zitat:

fatal error C1083: Cannot open include file: 'iostream': No such file or directory


Zur Struktur, eigentlich nichts spezielles.
Bei jedem Scanvorgang wird die oben gepostete Funktion aufgerufen welche den Strichcode einliest.
Der Strichcode ist ein String aus mehreren Zahlen und Buchstaben.
Dieser String möchte ich dann jeweils in eine Datei speichern.


Zitat:

123456780
123456781
123456782
123456783
123456784
123456785
12345678A
etc...



Das Speichern eines einzelnen Strings ist auch kein Problem.
Was nicht klappt, ist die Auflistung der eingelesenen Daten.
Im Augenblick werden alle Strings einfach an den anfang der Datei geschrieben und überschreiben so den alten Inhalt.
Ich hätte aber gerne, das der neue String, auf einer neuen Zeile in die Datei geschrieben wird.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.11.2006, 12:17 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Du musst nach dem Öffnen mit SetFilePointer ans Ende der Datei springen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.11.2006, 14:03 Uhr
Marcosan



So, alle Probleme gelöst.

Frage 3: Zeinenumbrüche
Bisher bin ich von allen möglichen Variationen für \n ausgegangen.

Dabei habe ich übersehen, dass bei Microsoft das ganze etwas anders gehandhabt wird als ein "normales" Linefeed.
Um einen Zeilenumbruch zu bekommen musste ich \r\n verwenden und es klappt.

Damit währen alle Fragen gelöst.

Danke an alle Antworter für die Hilfe und Tipps.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: