Seite 1 von 1

String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: So Mär 30, 2014 11:15 pm
von airpirate
Hallo,

Ich möchte automatisch Videostreamlinks HTML konvorm in einer XML abspeichern.
Hierzu wollte ich meine C Kenntnisse vertiefen.

Via URL Snooper habe ich nen Link in der Art in der Zwischenablage liegen:

rtmp://31.666.0.187/pull/<playpath>kluk?keys=C9i0pnq7S7SKOLCMlLx6Hw&keyt=1396208645 <swfUrl>http://files.leton.tv/jwplayer.flash.swf <pageUrl>http://leton.tv/player.php?streampage=k ... height=500

und möchte nun alle & mit & ersetzen.

Hierzu hab ich schonmal angefangen, siehe unten

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) 
{
	FILE *fp;
	int i;

	fp = fopen("config_test.xml", "a");
	
	if(fp == NULL) 
	{
		printf("Datei konnte nicht geoeffnet werden.\n");
	}else 
	{
		fprintf(fp, "<titel>Budspencer</titel>\n");
		printf("URL kopieren\n");
		system("PAUSE");
		
		int ok = OpenClipboard(NULL);
		char * cBuffer = NULL;
	   
		HANDLE hClipData = GetClipboardData( CF_TEXT );
		cBuffer = (char*)GlobalLock( hClipData );
		GlobalUnlock( hClipData );
		CloseClipboard();

		char delimiter[] = "&";
		char *ptr;

		ptr = strtok(cBuffer, delimiter);
	
		while(ptr != NULL) {
			if (ptr== NULL)
			 {
			 	fprintf(fp," timeout=14\n");
			 	break;
			 }
			fprintf(fp,"%s&", ptr);
		 	ptr = strtok(NULL, delimiter);
		}
		
		fclose(fp);
		printf("XML wurde erstellt\n");
	}
	return 0;
}
Mein Problem ist nun, dass ich am Ende des Links noch ein & stehen habe.
Daher auch mein Versuch durch die IF in der While Schleife dies zu verhindern, leider ohne Erfolg.

Fals es noch wichtig ist, nutze Dev C++ und Notepad, auf Win7 64bit.

Ich hoffe mir kann bei meinem Problem geholfen werden.

Gruß

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: So Mär 30, 2014 11:54 pm
von nufan
Hallo :)

Du verwendest in deinem Code die Windows-API. Da du den Link aber schon in der Zwischenablage hast und von dort anscheinend auslesen kannst, lasse ich nicht relevante Teile bei deinem Code mal einfach weg und baue den URL-String fix in das Programm ein:

Code: Alles auswählen

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char cBuffer[] = "rtmp://31.666.0.187/pull/<playpath>kluk?keys=C9i0pnq7S7SKOLCMlLx6Hw&keyt=1396208645 <swfUrl>http://files.leton.tv/jwplayer.flash.swf <pageUrl>http://leton.tv/player.php?streampage=kluk&width=820&height=500";
    char delimiter[] = "&";

    char *ptr = strtok(cBuffer, delimiter);

    while(ptr != NULL)
    {
        if (ptr== NULL)
        {
            printf(" timeout=14\n");
            break;
        }
        printf("%s&", ptr);
        ptr = strtok(NULL, delimiter);
    }
    printf("\n");

    return 0;
}
Zu der if-Bedingung in der Schleife:
Diese Bedingung wird nie* einen Effekt auf dein Programm haben. Normalerweise verwirft sie der Compiler, da sie niemals zutreffen kann.

Zu deinem eigentlichen Problem:
Du gibst deinen letzten Teilstring (ptr) aus und hängst noch ein "&" dran. Allerdings weißt du nie, wann du beim letzten Teilstring angekommen bist. Du gibst dein "&" aus ohne zu wissen, ob dahinter noch was kommt. Festzustellen, ob dahinter noch ein Teilstring kommt wäre auch sehr umständlich. Stattdessen solltest du - außer beim allerersten Durchlauf - dein "&" vor dem gefundenen Teilstring ausgeben.
Du musst jetzt also bloß in der Schleife prüfen, ob du momentan im ersten Durchlauf bist. Ist das nicht der Fall, gibst du "&" vor ptr aus. Ansonsten gibst du nur ptr aus, ohne "&" davor.

Klar? :)


* In ganz besonderen Fällen schon, aber das hier ist keiner von diesen Fällen.

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: Mo Mär 31, 2014 1:24 am
von airpirate
Da ich gerade auf dem Sprung bin kann ich nich mehr nachvollziehen ob diese IF konstelation ein Timeout mir in die xml schreibt oder nicht,
Aber es hat mal funktioniert.

Wenn ich richtig verstanden habe dann reicht ein Flag dass ich in der Schleife auf true setze und darauf abfragen

Code: Alles auswählen

...
int erste;
erste =0;
...
while
{...
	if erste == 0
	{....
		erste = 1;
	}
	else{.....}
}
Sry wenn es gerade etwas kryptisch aussieht, hab aber grad nicht genügend zeit es richtig einzutippen

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: Mo Mär 31, 2014 6:24 pm
von nufan
airpirate hat geschrieben:Wenn ich richtig verstanden habe dann reicht ein Flag dass ich in der Schleife auf true setze und darauf abfragen
Das wäre eine einfache und schöne Lösung, ja.

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: Mo Mär 31, 2014 8:45 pm
von airpirate

Code: Alles auswählen

		while(ptr != NULL) {
			if (erstesmal)
			 {
			 	erstesmal=0;
			 	fprintf(fp,"%s", ptr);
			  	ptr = strtok(NULL, delimiter);
			 }
			fprintf(fp,"&%s", ptr);
		 	ptr = strtok(NULL, delimiter);}
THX läuft wunderbar

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: Mo Mär 31, 2014 8:55 pm
von nufan
Dann versuch mal das:

Code: Alles auswählen

rtmp://31.666.0.187/pull/<playpath>kluk?keys=C9i0pnq7S7SKOLCMlLx6Hw

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: Mo Mär 31, 2014 11:13 pm
von airpirate
Hi,

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <string.h>

int main(int argc, char *argv[]) 
{
	FILE *fp;
	int erstesmal;
	erstesmal =1;

	fp = fopen("config_test.xml", "a");
	
	if(fp == NULL) 
	{
		printf("Datei konnte nicht geoeffnet werden.\n");
	}else 
	{
		printf("URL kopieren\n");
		system("PAUSE");
		
		int ok = OpenClipboard(NULL);
		char * cBuffer = NULL;
	   
		HANDLE hClipData = GetClipboardData( CF_TEXT );
		cBuffer = (char*)GlobalLock( hClipData );
		GlobalUnlock( hClipData );
		CloseClipboard();

		char delimiter[] = "&";
		char *ptrUnd, *ptrEckigAuf, *ptrEckigZu, *ptrUrl;
		
		ptrEckigAuf = strstr (cBuffer, "<");
		while(ptrEckigAuf !=NULL)
		{
			strncpy (ptrEckigAuf, " ", 1);
			ptrEckigAuf = strstr (cBuffer, "<");
		}
		
		ptrEckigZu = strstr (cBuffer, ">");
		while(ptrEckigZu !=NULL)
		{
			strncpy (ptrEckigZu, "=", 1);
			ptrEckigZu = strstr (cBuffer, ">");
		}
		
		ptrUrl = strstr (cBuffer," pageUrl=");
		strncpy (ptrUrl, "pageUrl=\"",9 );

		ptrUnd = strtok(cBuffer, delimiter);
		while(ptrUnd != NULL) {
			if (erstesmal)
			 {
			 	erstesmal=0;
			 	fprintf(fp,"%s", ptrUnd);
			 }
			 else
			 {
			 	fprintf(fp,"&%s", ptrUnd);
			 }
			ptrUnd = strtok(NULL, delimiter);
		}
		fprintf(fp,"\" timeout=14\n");	
		fclose(fp);
		printf("XML wurde erstellt\n");
	}
	return 0;
}
Also dieser Code wandelt mir die addresse die ich von URL SNooper bekomme in einen passenden HTML String um.
PS. kann man die Titel in gelöst bearbeiten?

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Verfasst: Di Apr 01, 2014 12:39 pm
von nufan
airpirate hat geschrieben:Also dieser Code wandelt mir die addresse die ich von URL SNooper bekomme in einen passenden HTML String um.
Ich hab den Code nicht getestet, aber der Teil mit dem & sieht gut aus. Wenn du erwartest, dass Andere deinen Code testen, dann bitte auf was wesentliche kürzen und externe Bibliotheken weglassen, so wie ich das oben gemacht hab.
airpirate hat geschrieben:PS. kann man die Titel in gelöst bearbeiten?
Der Zeitraum zum Bearbeiten von Beiträgen ist leider begrenzt, aber wenn du willst erledige ich das für dich.