String aus Zwischenablage bearbeiten [s.Hilfe]

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
airpirate
Beiträge: 4
Registriert: So Mär 30, 2014 10:57 pm

String aus Zwischenablage bearbeiten [s.Hilfe]

Beitrag von airpirate » So Mär 30, 2014 11:15 pm

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ß

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Beitrag von nufan » So Mär 30, 2014 11:54 pm

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.

airpirate
Beiträge: 4
Registriert: So Mär 30, 2014 10:57 pm

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Beitrag von airpirate » Mo Mär 31, 2014 1:24 am

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

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Beitrag von nufan » Mo Mär 31, 2014 6:24 pm

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.

airpirate
Beiträge: 4
Registriert: So Mär 30, 2014 10:57 pm

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

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

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

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Beitrag von nufan » Mo Mär 31, 2014 8:55 pm

Dann versuch mal das:

Code: Alles auswählen

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

airpirate
Beiträge: 4
Registriert: So Mär 30, 2014 10:57 pm

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Beitrag von airpirate » Mo Mär 31, 2014 11:13 pm

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?

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: String aus Zwischenablage bearbeiten [s.Hilfe]

Beitrag von nufan » Di Apr 01, 2014 12:39 pm

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.

Antworten