zeichenfolge in einer datei suchen?!? & bilder in dos??
-
Moinsen!!
1.Wollte mal fragen wie ich am einfachsten ein word/zeichenfolge in einer datei(die ich als binär datei/im binär modus geöffnet habe) suchen kann mir und die position von der zeichen folge auf einer variablen bekomme ???
2.Nen klassenkamerad von mir meinte er hätte irgendwo gelesen das man bilder in dos anzeigen lassenkann (am besten wäre noch als hintergrund)!?!KP wie des gehen soll!! hab auch noch nirgends etwas zu dem thma gefunden??
schon ma thx schomal für eure hilfe
greetz beelze
-
zu 2)
Dos-Hintergrundbild???
Des dürfte wohl kaum funzen:
Ich schätz mal, du willst das Bild als Hintergrund von der Konsole (im Textmodus)
(also einfach da, wo du die ganzen DOS-Befehle eingibst, ned win-Konsole).Das dürfte jedoch nicht möglich sein:
Die Konsole setzt sich zusammen aus 25 Zeilen zu je 80 Zeichen (=> insgesamt 2000 Zeichen darstellbar).Zu jedem dieser Felder gehört ein ganz bestimmter Speicherbereich (zu jedem 2 Byte, beginnend bei 0B800:0000h).
Das eine Byte gibt dabei jeweils den Inhalt des Feldes an (also welches Zeichen angezeigt werden soll)
das andere Byte ist das sog. Attribut-Byte.
von diesem geben die ersten 4 Bit die Schriftfarbe an (16 Farben Schrift),
die nächsten drei Bit steht für die Hintergrundfarbe (-> 8 Farben Hintergrund)
und das 8. Bit steht für Blinken.Somit dürfte es also sehr schwierig werden, da ein Bild einzufügen
mfg
MartinPS:
ich hoffe mal, dass ich etz ned lauter Müll verzählt hab
-
Hi.
Da DOS auch in einem VGA-Grafikmodus auch brav seine Zeichen auf den Bildschirm pinselt, behaupte ich einfach mal, dass es mit einigem Aufwand doch moeglich waere, ein Hintergrundbild einzufuegen.
Das sollte sich dann sogar fuer hochgaufloesende VESA-Modi hinbiegen lassen.
Dazu muesste man dann erstmal in den Grafikmodus schalten, das Hintergrundbild laden und zu guter letzt die Funktionen zur Textausgabe des VGA-BIOS ein wenig umschreiben (ich nehme einfach mal an, dass DOS selbige verwendet - ungeprueft!).
-
Zu 1.
Datei einlesen in char-Array (evtl. häppchenweise), Dateizeiger jeweils merken (vor dem Lesen!) und mit strstr() Zeichenfolge suchen. Wenn gefunden gemerkten Dateizeiger + Ergebnis von strstr - Anfangsadresse deiner char-Array-Variablen = Anfangsposition in Datei der gesuchten ZeichenfolgeZu 2.
Natürlich ist das möglich. Wie schon beschrieben, muss man dazu in den Grafikmodus wechseln. Am besten man verwendet schon fertige Bibliotheken dafür, wie z. B. allegro. Aber um die Textausgabe muss man sich dann selber kümmern. Wenn man nämlich wieder in den Textmodus wechselt und normal in der Konsole oder in DOS weiterschreibt, dann wird das Hintergrundbild einfach überschrieben und zwar nicht nur mit dem Text! Der Textmodus kennt keine Transparenz ;), d. h. dass um jedes geschriebene Zeichen dann (im Normalfall) ein schwarzer Kasten ist.
-
thx@all für euer hilfe
@aj hmm meinsde des so:
void main(void)
{
int k=0;
FILE *stream1;int ch;
int ch2;
char dateipfad[300];
do{
printf("\nBitte den Pfad und Namen der Datei eingeben \n>");
fflush(stdin);
gets(dateipfad);if((stream1=fopen(dateipfad,"rb"))== NULL)
{
printf("\n datei konnte nicht geöffnet werden");
k=1;
}
}while(k==1);
while(!feof)
{
ch=fgetc(stream1);
if(ch=='\/')
{
printf("\n hallo");
ch2=fgetc(stream1);if(ch2=='\/')
{
printf("\n hallo");
}
}
}}
so hab ich mir das gedacht aber der findet binär / nicht warum kein plan der schaft des nicht mal die datei zu öffnen
vieleicht hast du ja ne ahnung warum
-
Ich mein das in etwa so:
char paket[1025]; unsigned long dateipos; char *pos; char *suchstring="Text"; unsigned long suchpos; FILE *fp; int gelesen; fp=fopen("datei.dat", "rb"); if(fp) { while(!feof(fp)) //Prüfung, ob Dateiende gelesen wurde { dateipos=ftell(fp); //aktuelle Dateiposition holen gelesen=fread(paket, 1, 1024, fp); //Daten einlesen if(gelesen==1024) //Wenn ungleich, dann Fehler oder Dateiende { paket[gelesen]=0; //Stringendekennzeichen setzen pos=strstr(paket, suchstring); //Position des Suchstrings ermitteln if(pos) //Wenn gefunden { suchpos = dateipos + pos - paket; //Position in Datei merken break; //Da Suchstring gefunden, muss nicht weitergesucht werden ;) } } } close(fp); }