Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Psyke1

#1
Tengo un fichero csv con la siguiente información:

NOMBRE,EDAD,FECHA
MARIO,30,24/12/2002
MARIA,90,24/12/2001
PEDRO,10,24/12/2004


Y quiero hacer una consulta de la siguiente manera:

Código (vb) [Seleccionar]
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset

oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & Environ("temp") & ";" _
& "Extended Properties=""text;HDR=Yes;FMT=Delimited(;)"";Persist Security Info=False"

Set oRS = oConn.Execute("select * from datos.csv")
Dim ofield As ADODB.Field

Do Until oRS.EOF
    For Each ofield In oRS.Fields
        Debug.Print "Field Name = " & ofield.Name & " Field Value = " & ofield.Value
    Next ofield
    oRS.MoveNext
Loop


Esto devuelve:
Field Name = NOMBRE Field Value = MARIO
Field Name = EDAD Field Value = 30
Field Name = FECHA Field Value = 24/12/2002
Field Name = NOMBRE Field Value = MARIA
Field Name = EDAD Field Value = 90
Field Name = FECHA Field Value = 24/12/2001
Field Name = NOMBRE Field Value = PEDRO
Field Name = EDAD Field Value = 10
Field Name = FECHA Field Value = 24/12/2004


Pero si intento hacer una consulta del tipo:
Código (sql) [Seleccionar]
select EDAD from datos.csv where NOMBRE='MARIO'

Me devuelve esto:



¿Qué se me está escapando?
Muchas gracias.

DoEvents! :P
#2
Hola chicos, a ver si alguno me puede ayudar.

Estoy tratando de dividir unas variables COBOL para cada nivel redefine usando awk.

Hay que ver la lectura: http://programacioneinformaticafacil.blogspot.com.es/2011/07/cobol-redefines.html

Me explico:


  • El primera palabra de la línea es el número que indica el nivel.
  • Todos las variables de la líneas siguientes que tengan un nivel inferior, formarán un grupo de variables.
Ejemplo:


10 HOLA.
   15 PILA PIC XX.
       20 DESBORDAMIENTO PIC X.
       20 AMIGOS PIC X.
   15 WHATSUP PIC XX.



  • La segunda palabra de la línea es el nombre del bloque de variables.
  • Un redefines funciona de la siguiente manera:
    REDEFINES NOMBRE_VAR significa que el bloque de variables de NOMBRE_VAR podría ser sustituido por el siguiente grupo de variables.

Estoy tratando de conseguir todas las posibles combinaciones de sustituciones redefines.

Basta de teoría, veamos un ejemplo, con este input:

01 SUBSCRIBERS.
   05 TYPE-OF-NAME PIC X.
   05 FILLER PIC X(100).
   05 HELLO REDEFINES FILLER.
     10 HELLO1 PIC X(50).
     10 HELLO2 PIC X(25).
     10 HELLO3 PIC X(25).
   05 STACK REDEFINES FILLER.
     10 STACK1 PIC X(90).
     10 DERE2 PIC 9(10)
        20 DELE3 REDEFINES DERE2.
            25 DELE34 PIC X(10).
   05 LOL PIC 9(9).


Devolvería estos diferentes outputs:

output 1:

01 SUBSCRIBERS.
   05 TYPE-OF-NAME PIC X.
   05 FILLER PIC X(100).
   05 LOL PIC 9(9).


output 2:

01 SUBSCRIBERS.
   05 TYPE-OF-NAME PIC X.
   05 HELLO REDEFINES FILLER.
     10 HELLO1 PIC X(50).
     10 HELLO2 PIC X(25).
     10 HELLO3 PIC X(25).
   05 LOL PIC 9(9).


output 3:

01 SUBSCRIBERS.
   05 TYPE-OF-NAME PIC X.
   05 STACK REDEFINES FILLER.
     10 STACK1 PIC X(90).
     10 DERE2 PIC 9(10)
   05 LOL PIC 9(9).


output 4:

01 SUBSCRIBERS.
   05 TYPE-OF-NAME PIC X.
   05 STACK REDEFINES FILLER.
     10 STACK1 PIC X(90).
     20 DELE3 REDEFINES DERE2.
            25 DELE34 PIC X(10).
   05 LOL PIC 9(9).



Yo lo he intentado de la siguiente manera:

Código (bash) [Seleccionar]
#!/bin/bash

awk 'BEGIN {
 i=0;
 j=0;
 ant_l=99;
} {

 campo=$4;

 if ($0 ~ /REDEFINES/) {
   lvl=$1;
   if (lvl < ant_l) {
     ant_l=lvl
   }
   if ($1 > ant_l) {
     arr[j]=arr[j-1]"\n";
   } else {
     for (x=0; x < (i-1); x++) {
       arr[j]=arr[j] arrbase[x]"\n";
     }
   }
   arr[j]=arr[j] $0"\n";
   j++;
 } else if ($1 > ant_l) {
   arr[j-1]=arr[j-1] $0"\n";
 } else {
   arrbase[i]=$0;
   ++i;
 }
}

END {
 for (x=0; x<i; x++){
   print arrbase[x]
 }
 for (x=0; x<j; x++){
   print arr[x]
 }
}' "$1"


Y este es el resultado:


01 SUBSCRIBERS.
 05 TYPE-OF-NAME PIC X.
 05 FILLER PIC X(100).
 05 LOL PIC 9(9).

01 SUBSCRIBERS.
 05 TYPE-OF-NAME PIC X.
 05 HELLO REDEFINES FILLER.
   10 HELLO1 PIC X(50).
   10 HELLO2 PIC X(25).
   10 HELLO3 PIC X(25).

01 SUBSCRIBERS.
 05 TYPE-OF-NAME PIC X.
 05 STACK REDEFINES FILLER.
   10 STACK1 PIC X(90).
   10 DERE2 PIC 9(10)

01 SUBSCRIBERS.
 05 TYPE-OF-NAME PIC X.
 05 STACK REDEFINES FILLER.
   10 STACK1 PIC X(90).
   10 DERE2 PIC 9(10)

     20 DELE3 REDEFINES DERE2.
       25 DELE34 PIC X(10).


Obviamente, el algoritmo está mal planteado, y no devuelve el resultado esperado.
¿Algún awk hacker en la sala?  :rolleyes:
O al menos alguna pista para desarrollar el algortimo.

Gracias.
DoEvents! :P
#3
PHP / ¿Crear vistas temporales en php+mysqli ?
21 Febrero 2013, 22:02 PM
Hola a todos, planteo una duda que yo creo que es bastante simple. He buscado, pero todavía no he encontrado una solución.

Tengo un sistema de usuarios en el cual se repite mucho una subconsulta, la cual varía según una opción que elige.
Quería saber si hay alguna forma de guardar el resultado para no tener que perder tiempo y repetir código.

Estuve buscando información y las vistas hacen lo que necesito. El problema es que son generales puesto que afectan a toda mi base de datos y quedan guardadas, así que después las tendría que borrar. :'(

Busco la manera de hacer algo así como una vista temporal individual para cada usuario.

Espero haberme explicado bien.
Gracias.
#4
Tengo la siguiente tabla y consulta: Ver en SqlFiddle.
Ahí extraigo todos los ids de los elementos que tienen cm_min y cm_max dentro del rango ingresado, en este caso 13 y 66.

¿Se os ocurre alguna forma de simplificar esta consulta?

Gracias.
DoEvents! :P
#5
Tengo una velocidad de descarga normal, pero cuando intento subir archivos va como una tortuga (es casi nula).
Después fui a Windows y subo archivos a una velocidad normal.
Hice un test en:
http://www.speedtest.net/
Y me devolvió:
Upload test error
Iba a subir una captura... ¡pero no puedo! :-\ :xD
¿Qué pasa aquí? :-\

Aprovecho para preguntar otra duda:
Tengo el CPU al 35% de normal. Me puse a mirar los procesos y las webs con flash y el compiz consumen una autentica barbaridad.

Agradecería cualquier ayuda.
DoEvents! :P
#6
Un número palíndromo es aquel que se lee igual si lo damos la vuelta, ejemplos:
98789
121
345543


El palíndromo más grande de la multiplicación de dos números de dos cifras es:
9009 = 91 X 99

¿Cuál sería el palíndromo más grande de la multiplicación de dos números de TRES cifras?




Normas del reto:

1.-NO es válido precargar valores.

2.-Estructura de la función:
Código (vb) [Seleccionar]
Public Function PE4_Psyke1(Optional Byval lCifras As Long = 3) As Double

3.-La función debe de ser válida para todas las cifras que se le pasen por el argumento.

4.-El resultado correcto es:
906609

Reto original:

http://projecteuler.net/problem=4


DoEvents! :P
#7
Los factores primos de 13195 son 5, 7, 13 and 29.
¿Cual es el factor primo más grande del numero 600851475143?

Debe devolver el número:
6857

http://projecteuler.net/problem=3

Estructura:
Código (vb) [Seleccionar]
Public Function ProyectEuler3(Optional ByVal lNumber As Double = 600851475143) As Double

DoEvents! :P
#8
Pues resulta que quiero hacer algo similar a esto:






¿Cómo podría sacar capturas de pantallas de una web desde diferentes dispositivos? :huh:
Quiero sustituir esas imágenes por unas de mi página. :)

Agradezco cualquier ayuda. ;)
Gracias.

DoEvents! :P
#9
Generar algoritmo que devuelva la suma de los números pares de la serie de Fibonacci menores a 4000000.

Info:
http://projecteuler.net/problem=2
http://es.wikipedia.org/wiki/Sucesi%C3%B3n_de_Fibonacci


La función es correcta si devuelve:
4613732

Estructura a seguir:
Código (vb) [Seleccionar]
Private Function NOMBREFUNCION(Optional lLimit As Long = 4000000) As Long

DoEvents! :P
#10
¿Qué os parece si hacemos todos los retos de Proyect Euler ?
Después se podría poner una chincheta con todos los ejercicios guardados. :)

¿Empezamos por el 1?
http://projecteuler.net/problem=1

DoEvents! :P
#11
Diseño Gráfico / Alternativa a esta fuente
21 Enero 2013, 23:11 PM
¿Alguien me podría decir qué fuente es la de esta web? :huh:
http://thegeekdesigner.com/

O si no lo sabéis con exactitud, agradecería que me recomendaseis alguna similar.
Gracias  :)

DoEvents! :P
#12
Supongamos que compilo esto y lo llamo "process.exe"
http://allapi.mentalis.org/apilist/3F67FD0ABC04BEB6623FB5C547B77976.html

¿Podría hacer desde mi programa que el nombre de todos los procesos que va listando "process.exe" siempre devolviera "elhackernet.exe"?
Algo así como hacer un hook al ejecutable, ver cuando utiliza los apis GetModuleFileNameExA(), EnumProcesses()... y cambiar su valor de retorno.

Vi algo parecido aquí:
http://memoryhacking.com/forums/viewtopic.php?f=37&t=5988

¿Es posible?, ¿alguna idea?, ¿y si utiliza invokeapis se podría hacer también? :huh:
Gracias. :-*

DoEvents! :P
#13
Tengo un programa que sólo te deja ejecutarse una vez al mismo tiempo.

Para ello, al abrirse comprueba que no haya otro corriendo que tenga el mismo nombre. Eso es lo único que hace. Lo sé porque estuve haciendo pruebas, y si renombro y ejecuto un exe cualquiera con el nombre del programa y después intento abrir el exe del programa que hablo, detectará que ya hay uno abierto y se cerrará.
Si le cambiamos el nombre original tampoco se abrirá. :-\

He probado a correrlo desde SandBoxie sin resultados. También probé a ejecutarlo como otro usuario y nada, tampoco le puedo engañar. :¬¬

Lo siguiente que se me ocurre es utilizar ingeniería inversa, aunque he de admitir que estoy un poco verde en el tema. :silbar:

¿Alguna idea, chicos? :)
Muchas gracias.

DoEvents! :P
#14
Propongo esto pues cada dos por tres entra gente despistada poniendo dudas y códigos de vb.net, el cual ya tiene foro específico. :-\
Creo que si se cambiara el nombre a Programación Visual Basic 6 ahorraría trabajo a los moderadores, que están moviendo temas constantemente y contribuiría a la limpieza del foro. :)

¿Qué os parece? :huh:

DoEvents! :P
#15
Pues eso, consiste en encontrar la manera más rápida de obtener la última carpeta accesible a partir de una ruta, los formatos válidos son estos:
Código (vb) [Seleccionar]
Public Function getLastFolder(Byval sStartPath As String) As String()
Public Function getLastFolder(Byval sStartPath As String) As Collection


Ejemplo:
Código (vb) [Seleccionar]

Debug.Print getLastFolder("C:\Users\casa-pc\Desktop\")

C:\Users\casa-pc\Desktop\Música\Sonido\Programas\Video\VLC\data\res

Consiste en encontrar la carpeta más profunda, en caso de haber más de una la función devolverá el resultado en una collection o en un array.

¡Suerte! :)
#16
Tengo Windows 7.

Copio mi exe en la carpeta de inicio, reinicio, pero no se ejecuta.
También he probado a añadir una clave en el registro y nada...
Puede ser porque mi exe requiere permisos de administrador pues si creo un programa que tan sólo te muestre un MsgBox funciona con cualquiera de los métodos anteriores... :P

¿Alguna solución? ???

DoEvents! :P
#17
Bueno, estos códigos los he sacado para un proyecto en curso.
Devuelven un array con las subcarpetas de un servidor local.

OPCIÓN 1:

Código (vb) [Seleccionar]

Option Explicit
'===========================================================================
' º Name        : GetSharedSubFolders
' º Author      : Psyke1
' º Mail        : vbpsyke1@mixmail.com
' º Explanation : Returns an array with the subfolders of a shared folder.
' º Date        : 26/11/12
' º Reference   : http://goo.gl/sgDVX
' º Greets      : LeandroA
' º Visit       :
'    * http://foro.h-sec.org
'    * http://infrangelux.sytes.net
'===========================================================================

Public Function getSharedSubFolders(ByVal sServer As String) As Collection
Dim oShell                  As Object
Dim oItem                   As Variant
   
   If PathIsNetworkPath(sServer) Then
      Set oShell = CreateObject("Shell.Application")
   
      If Not oShell.NameSpace(CVar(sServer)) Is Nothing Then
         Set getSharedSubFolders = New Collection
       
         For Each oItem In oShell.NameSpace(CVar(sServer)).Items
             getSharedSubFolders.Add oItem.Path
         Next oItem
      End If
   End If
End Function


Ejemplo de uso:
Código (vb) [Seleccionar]

Private Sub Form_Load()
Dim vFolder                 As Variant
Dim cTmp                    As Collection

   Set cTmp = getSharedSubFolders("\\CARLOS-PC")
   If cTmp Is Nothing Then
       MsgBox "El servidor local no existe"
   Else
       For Each vFolder In cTmp
           Debug.Print vFolder
       Next
   End If
End Sub





OPCIÓN 2:

Código (vb) [Seleccionar]

Option Explicit
'===========================================================================
' º Name        : mGetSharedSubFolders.bas
' º Author      : Psyke1
' º Mail        : vbpsyke1@mixmail.com
' º Explanation : Returns an array with the subfolders of a shared folder.
' º Date        : 26/11/12
' º Visit       :
'    * http://foro.h-sec.org
'    * http://infrangelux.sytes.net
'===========================================================================

'Type
Private Type NETRESOURCE
 dwScope       As Long
 dwType        As Long
 dwDisplayType As Long
 dwUsage       As Long
 lpLocalName   As Long
 lpRemoteName  As Long
 lpComment     As Long
 lpProvider    As Long
End Type

'kernel32.dll
Private Declare Function lstrlenA Lib "kernel32.dll" (ByVal pString As Long) As Long
Private Declare Function lstrcpyA Lib "kernel32.dll" (ByVal lpString1 As String, ByVal pString As Long) As Long

'mpr.dll
Private Declare Function WNetOpenEnum Lib "mpr.dll" Alias "WNetOpenEnumA" (ByVal dwScope As Long, ByVal dwType As Long, ByVal dwUsage As Long, lpNetResource As NETRESOURCE, lphEnum As Long) As Long
Private Declare Function WNetCloseEnum Lib "mpr.dll" (ByVal hEnum As Long) As Long
Private Declare Function WNetEnumResource Lib "mpr.dll" Alias "WNetEnumResourceA" (ByVal hEnum As Long, lpcCount As Long, lpBuffer As NETRESOURCE, lpBufferSize As Long) As Long

'shlwapi.dll
Private Declare Function PathIsNetworkPath Lib "shlwapi.dll" Alias "PathIsNetworkPathA" (ByVal pszPath As String) As Long

'Consts
Private Const RESOURCE_GLOBALNET        As Long = &H2
Private Const RESOURCETYPE_DISK         As Long = &H1
Private Const MAX_RESOURCES             As Long = &H100

'Function
Public Function getShareSubFolders(ByVal sNameServer As String) As String()
Dim hEnum                               As Long
Dim lLen                                As Long
Dim lTotal                              As Long
Dim lpRName                             As Long
Dim sRet()                              As String
Dim tNet(0 To MAX_RESOURCES)            As NETRESOURCE

   If PathIsNetworkPath(sNameServer) Then
       lTotal = -1
       lLen = &H1000 '(UBound(tNet) * Len(tNet(0))) / 2
       
       tNet(0).lpRemoteName = StrPtr(StrConv(sNameServer, vbFromUnicode))
       
       If Not WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK, 0, tNet(0), hEnum) Then
           If Not WNetEnumResource(hEnum, lTotal, tNet(0), lLen) Then
               If lTotal > 0 Then
                   lTotal = lTotal - 1
                   ReDim sRet(0 To lTotal) As String
                   
                   For lLen = 0 To lTotal
                       lpRName = tNet(lLen).lpRemoteName
                       
                       sRet(lLen) = Space(lstrlenA(lpRName))
                       lstrcpyA sRet(lLen), lpRName
                   Next lLen
               End If
           End If
           
           WNetCloseEnum hEnum
       End If
   End If
   
   getShareSubFolders = sRet()
End Function


Ejemplo de uso:
Código (vb) [Seleccionar]
Private Sub Form_Load()
Dim vSubFolder                          As Variant
Dim sSF()                               As String

   sSF = getShareSubFolders("\\CARLOS-PC")

   If Not Not sSF Then

       For Each vSubFolder In sSF
           Debug.Print vSubFolder
       Next vSubFolder
   End If
   
   'fix NotNot hack :)
   Debug.Assert App.hInstance
End Sub


DoEvents! :P
#18
Pues eso... me es muy cómodo a la hora de buscar una sección concreta en un código.
¿Qué opináis?

DoEvents! :P
#19
Me estoy volviendo loco... :huh:
Necesito extraer todas las carpetas que contenga la carpeta compartida "\\micarpeta\".
Tan sólo para saber si existe ya he tenido problemas puesto que devuelve false utilizando métodos tradicionales. Eso lo he solucionado con api PathIsNetworkPath().

En cambio puedo listar las carpetas de una subcarpeta suya:
Código (vb) [Seleccionar]

Private Sub Form_Load()
    Dim f As Object, s
   
    Set f = CreateObject("Scripting.FileSystemObject")
   
    For Each s In f.GetFolder("\\micarpeta\hola").SubFolders
        MsgBox s
    Next
End Sub


He encontrado los apis WNetEnumResource(), WNetOpenEnum(), WNetCloseEnum(), WNetOpenEnum().
http://allapi.mentalis.org/apilist/2AA74BB4AC857C52AD4BC7FA9E4DB1B7.html

Pero es extremaaaaaadamente lento... :(
Así que me comprometo a levantar un monumento a quién me sepa guiar/dar una solución. :-*

DoEvents! :P
#20
Necesito saber si tengo permisos de escritura en una carpeta.
Se me ocurrió solucionarlo creando un archivo y controlando los errores, pero me parece demasiado feo.  :silbar:
¿Alguna idea?

Gracias.

DoEvents! :P
#21
Código (javascript) [Seleccionar]
Sí, lo sé, las calculadoras están muy vistas, pero como lo tuve que hacer para clase de paso lo pongo aquí.

Código (javascript) [Seleccionar]
<html>
<head>
<style>
input{
width: 42px;
}

#logs, #res, #igual{
text-align: right;
width: 180px;
}

.op, #igual{
text-align: center;
}
</style>

<script language="javascript">
function getLastchar(){
var mylogs = document.calc.logs.value;
var len = mylogs.length;

if (len){
return mylogs[len - 1];
}

return "";
}

function anadir(x){
var logstext = document.calc.logs;
var restext = document.calc.res;

if (logstext.value == "" && restext.value != ""){
restext.value = "";
}

if ((". ".indexOf(getLastchar()) > -1 && isNaN(x)) == false){
if (x.indexOf(" ") > -1){
calcular();
}

logstext.value += x;
}
}

function quitar(){
var logstext = document.calc.logs;
var num = (getLastchar() == " ") ? 3: 1;

logstext.value = logstext.value.substring(0, logstext.value.length - num);
}

function calcular() {
document.calc.res.value = eval(document.calc.logs.value);
}

function getResult(){
if (getLastchar() == " "){
document.calc.res.value = "Syntax error";
} else {
calcular();
document.calc.logs.value = "";
}
}
</script>
</head>

<body>
<form name="calc">
<input type="text" id="logs" readonly="true"/>
<br />
<input type="text" id="res" readonly="true"/>
<br />

<input type="button" value="1" onclick="anadir('1')" />
<input type="button" value="2" onclick="anadir('2')" />
<input type="button" value="3" onclick="anadir('3')" />
<input type="button" value="&larr;" onclick="quitar()" />
<br />

<input type="button" value="4" onclick="anadir('4')" />
<input type="button" value="5" onclick="anadir('5')" />
<input type="button" value="6" onclick="anadir('6')" />
<input type="button" value="-" onclick="anadir(' - ')" />
<br />

<input type="button" value="7" onclick="anadir('7')" />
<input type="button" value="8" onclick="anadir('8')" />
<input type="button" value="9" onclick="anadir('9')" />
<input type="button" value="+" onclick="anadir(' + ')" />
<br />

<input type="button" value="0" onclick="anadir('0')" />
<input type="button" value="." onclick="anadir('.')" />
<input type="button" value="*" onclick="anadir(' * ')" />
<input type="button" value="/" onclick="anadir(' / ')" />
<br />

<input type="button" id="igual" value="=" onclick="getResult()" />
</form>
</body>
</html>


DoEvents! :P
#22
A ver quien hace una función que devuelva true si en el código de vb introducido se ejecutará un MsgBox o un Print con "Hola Mundo".

Estructura:
Private Function AdivinarMsgBox(ByVal sVBcode As String) As Boolean

Ejemplo de llamadas:

TRUE

Private Form Load()
  If 1<4 Then
     Msgbox "Hola Mundo"
  End If
End Sub


FALSE

Private Form Load()
     'Msgbox "Hola Mundo"
End Sub


TRUE

Private Form Load()
     Me.Print "Hola Mundo"
End Sub


FALSE

Private Form Load()
Dim a As Long, b As Long
  a=23
  b=234
 
  If a>b and 234>45634 Then
  if "asd" = "aasdsd" then
     Msgbox "Hola Mundo"
  end if
  End If
End Sub


Vale todo!

Suerte!
#23
Desarrollo Web / XMPP Chat Visitante-Servidor [Duda]
25 Septiembre 2012, 12:12 PM
Estoy intentando crear un chat visitante-administrador, algo similar a lo que podemos encontrar (abajo a la derecha) en esta web:
http://www.orbitadigital.com/
Ese en concreto es de ZOPIM
www.zopim.com
Un vídeo explicativo:
[youtube=425,350]https://www.youtube.com/watch?v=tSRSn9hJU1c&feature=player_embedded[/youtube]

El caso es que el visitante envía un mensaje al administrador, quien los recibe y los contesta por medio de un cliente de mensajería XMPP, como por ejemplo GTalk, Skype, Msn...

Mi duda es... ¿cómo envía y recibe el visitante si no ingresa ninguna información para logearse a un cliente XMPP?
¿Conocéis algún ejemplo así de código abierto que sea (más o menos) sencillo de entender?
Si no es así... ¿Se os ocurre alguna alternativa a esto?

Gracias
DoEvents! :P
#24
Bases de Datos / Duda con modelo relacional
22 Agosto 2012, 12:34 PM
Hola chicos, vengo aquí con alguna dudilla acerda de modelos relacionales. :huh:

Si tengo la relación:
Escuela (alumno, idioma, profesor)

En todos los casos:

  • Un idioma lo imparten varios profesores.
  • Un idioma lo cursan varios alumnos.
  • Un profesor tiene varios alumnos.

Quiero determinar la forma normal, pasarlo a 3FN si fuera necesario y determinar la clave de la relación Escuela en los siguientes casos:


Caso A:
Un alumno cursa varios idiomas y un profesor imparte varios idiomas.

Caso B:
Un alumno solo cursa un idioma y un profesor imparte varios idiomas.

Caso C:
Un alumno solo cursa un idioma y un profesor sólo imparte un idioma.


He mirado algo de documentación al respecto pero sigo sin aclararme. :-\

¡Muchas gracias!  ;)
#25
Bases de Datos / PL/SQL función boolean
28 Junio 2012, 15:36 PM
Mirad este código:

Código (sql) [Seleccionar]

DECLARE
vsalario EMPLEADO.salario%TYPE;

CURSOR cmayor (mas number) is
select nombre, salario
from empleado
where salario=vsalario;

BEGIN
SELECT MAX(SALARIO) INTO VSALARIO
FROM EMPLEADO;

FOR VMAYOR IN CMAYOR (VSALARIO) LOOP
DBMS_OUTPUT.PUT_LINE('NOMBRE' || VMAYOR.NOMBRE);
DBMS_OUTPUT.PUT_LINE('SALARIO' || VMAYOR.SALARIO);
END LOOP;
END;


Fijaros que en el cursor:
CURSOR cmayor (mas number) is
select nombre, salario
from empleado
where salario=vsalario;


El parámetro "mas" no se utiliza, en su lugar aparece "vsalario".
Es una pregunta que me han puesto en un examen, no pido saber si es lógica, quiero saber si el código funcionaría.

Gracias.
#26
Voy a hacer una función que resuma un texto, para ello había pensado:



  • Comprobar que hay una correcta ortografía con esto.
    • Guardar oraciones en arrays y buscar palabras más repetidas (omitiendo artículos, preposiciones y demás usando un motor de análisis sintáctico) y dar prioridad a las oraciones dónde salgan éstas.
    • Identificar títulos.
    • Identificar palabras con mayúsculas.
    • Utilizar sinónimos en las palabras no principales.
    • Acortar enumeraciones largas que acaben en "etc" o "..."

    Información relevante:

    Poned ideas, fragmentos de algoritmos o documentación interesante. :)

    DoEvents! :P
#27
Diseño Gráfico / ¿Cómo crear cómics?
24 Mayo 2012, 16:48 PM
Me gustaría que me aconsejarais acerca de algún programa que facilite la creación de cómics.
La idea que tengo en mente es hacer algo de este estilo:


Gracias. ;-)

DoEvents! :P
#28
Pues eso, un generador de DTD's a partir de un XML. Los que he visto por la web son muy malos, a ver si somos capaces de hacer algo decente.  :silbar:




Información:
http://es.wikipedia.org/wiki/Definici%C3%B3n_de_tipo_de_documento
http://www.w3schools.com/dtd/dtd_intro.asp




Ejemplo:

Agregamos un TextBox con Multiline=True y le ponemos esto:
<?xml version="1.0"?>
<!DOCTYPE DatabaseInventory SYSTEM "DatabaseInventory.dtd">

<DatabaseInventory>

 <DatabaseName>
   <GlobalDatabaseName>production.iDevelopment.info</GlobalDatabaseName>
   <OracleSID>production</OracleSID>
   <DatabaseDomain>iDevelopment.info</DatabaseDomain>
   <Administrator EmailAlias="jhunter" Extension="6007">Jeffrey Hunter</Administrator>
   <DatabaseAttributes Type="Production" Version="9i"/>
   <Comments>
     The following database should be considered the most stable for
     up-to-date data. The backup strategy includes running the database
     in Archive Log Mode and performing nightly backups. All new accounts
     need to be approved by the DBA Group before being created.
   </Comments>
 </DatabaseName>

 <DatabaseName>
   <GlobalDatabaseName>development.iDevelopment.info</GlobalDatabaseName>
   <OracleSID>development</OracleSID>
   <DatabaseDomain>iDevelopment.info</DatabaseDomain>
   <Administrator EmailAlias="jhunter" Extension="6007">Jeffrey Hunter</Administrator>
   <Administrator EmailAlias="mhunter" Extension="6008">Melody Hunter</Administrator>
   <DatabaseAttributes Type="Development" Version="9i"/>
   <Comments>
     The following database should contain all hosted applications. Production
     data will be exported on a weekly basis to ensure all development environments
     have stable and current data.
   </Comments>
 </DatabaseName>

 <DatabaseName>
   <GlobalDatabaseName>testing.iDevelopment.info</GlobalDatabaseName>
   <OracleSID>testing</OracleSID>
   <DatabaseDomain>iDevelopment.info</DatabaseDomain>
   <Administrator EmailAlias="jhunter" Extension="6007">Jeffrey Hunter</Administrator>
   <Administrator EmailAlias="mhunter" Extension="6008">Melody Hunter</Administrator>
   <Administrator EmailAlias="ahunter">Alex Hunter</Administrator>
   <DatabaseAttributes Type="Testing" Version="9i"/>
   <Comments>
     The following database will host more than half of the testing
     for our hosting environment.
   </Comments>
 </DatabaseName>

</DatabaseInventory>


Llamamos a la función así:
Código (vb) [Seleccionar]

Option Explicit

Private Sub Form_Load()
Dim sDTD As String

   GetDTD_Psyke1_I Text1.Text, sDTD
   Debug.Print sDTD
End Sub


Y nos devolvería algo similar a esto:
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT DatabaseInventory (DatabaseName+)>
<!ELEMENT DatabaseName (   GlobalDatabaseName
                        , OracleSID
                        , DatabaseDomain
                        , Administrator+
                        , DatabaseAttributes
                        , Comments)
>
<!ELEMENT GlobalDatabaseName (#PCDATA)>
<!ELEMENT OracleSID          (#PCDATA)>
<!ELEMENT DatabaseDomain     (#PCDATA)>
<!ELEMENT Administrator      (#PCDATA)>
<!ELEMENT DatabaseAttributes EMPTY>
<!ELEMENT Comments           (#PCDATA)>

<!ATTLIST Administrator       EmailAlias CDATA #REQUIRED>
<!ATTLIST Administrator       Extension  CDATA #IMPLIED>
<!ATTLIST DatabaseAttributes  Type       (Production|Development|Testing) #REQUIRED>
<!ATTLIST DatabaseAttributes  Version    (7|8|8i|9i) "9i">

<!ENTITY AUTHOR "Jeffrey Hunter">
<!ENTITY WEB    "www.iDevelopment.info">
<!ENTITY EMAIL  "jhunter@iDevelopment.info">


Otro ejemplo más sencillo:
http://www.comptechdoc.org/independent/web/xml/guide/xmlexample.html




Normas:

Formato (obligatorio):
Código (vb) [Seleccionar]

Public Sub GetDTD_{tu nick}_{versión en números romanos}(ByRef sXML As String, ByRef sDTDOutPut As String)



  • El XML ingresado no se debe modificar a lo largo de la función.
  • El más rápido y más completo gana.
  • Sin límite de entrega.
  • No se pueden utilizar clases hechas que faciliten el trabajo.
  • Damos por hecho que el XML está bien formateado. :silbar:

¡Suerte! >:D

DoEvents! :P
#29
Soy muy novato en esto, hice esta función:
Código (javascript) [Seleccionar]

function getID(user){
   $.getJSON('https://twitter.com/users/'+user+'.json?callback=?',
   function(data)
   {
       $('#followers').html(data.id_str);
   });
}


Funciona bien, pero quiero que en vez de modificar el valor de #followers me devuelva un valor, probé así:
Código (javascript) [Seleccionar]

function getID(user){
   $.getJSON('https://twitter.com/users/'+user+'.json?callback=?',
   function(data)
   {
       return data.id_str;
   });
}

Pero claro, me hace return a la función dentro de la que está, y no a getID. :-\
¿Soluciones? :huh:

DoEvents! :P
#30
Me gustaría encontrar un manager musical, alguien que apostara por mí y mi música.
Si soy sincero no tengo medios para grabar una maqueta de calidad para darme a conocer, pero tengo una alternativa:
Una vez a la semana suelo hacer una sesión en directo por webcam (vía twitcam.com), en la cual canto mis propias canciones, ofrecería a quien estuviera interesado asistir a una, tan sólo yo y mi guitarra. ;D
¿Dónde puedo encontrar alguien (de España a poder ser) con el cual poder hablar acerca de este tema? :huh:

¡Muchas gracias!

DoEvents! :P
#31
Estoy buscando la manera de crear un juego online 3d. Partiendo de la base de que no tengo mucha idea del tema empecé a indagar por ahí.
Programas como GameMaker HTML5 y Unity fueron los más sonados en las respuestas.
¿Alguien me podría guiar/aconsejar un poco sobre esto? :huh:

Gracias :D
#32
Una duda muy simple, espero que me podáis ayudar:
Necesito que me guiéis para hacer un buscador de otra página, me explico:
Es una página la cual no tiene buscador y quiero que en base a mi búsqueda, visualice enlaces a los post relacionados.

Gracias. :)

DoEvents! :P
#33
Pensé que no había solución humana a esto, también sé que hasta ahora se hacían chapuzadas modificando el registro y demás. :-(
He dado con la forma definitiva:

Código (vb) [Seleccionar]

Option Explicit
Private Declare Function CoInternetSetFeatureEnabled Lib "urlmon.dll" (ByVal FeatureEntry As Long, ByVal dwFlags As Long, ByVal fEnable As Long) As Long

Private Const FEATURE_DISABLE_NAVIGATION_SOUNDS     As Long = &H15
Private Const SET_FEATURE_ON_PROCESS                As Long = &H2

Private Sub Form_Load()
   CoInternetSetFeatureEnabled FEATURE_DISABLE_NAVIGATION_SOUNDS, SET_FEATURE_ON_PROCESS, True
End Sub


Afecta SÓLO sobre nuestro programa. :)

NOTA IMPORTANTE: Sólo funciona si tienes una versión del IE 7 o superior. :-[

DoEvents! :rolleyes:
#34
En España:
El caso es que un amigo me dijo que el año pasado había un profesor con el que suspendía la mayoría de la clase.
Reclamaron a final de curso que no entregó los criterios mínimos a principio de curso y aprobó toda la clase.
¿Es esto posible? ¿Conocéis algún caso? :huh:
¿Y si los entregó pero no los firmaron los alumnos sería posible también?

DoEvents! :P
#35
Foro Libre / Sueños lúcidos
27 Noviembre 2011, 19:02 PM
¿Alguno de vosotros habéis tenido alguno?

DoEvents! :P
#36
Java / Me salta una captura [Ayuda]
24 Noviembre 2011, 01:18 AM
¿Por qué no funciona correctamente esto? :huh:
Me salta la captura de sName a partir de la segunda vuelta.
¿Soluciones a ser posible usando la clase Scanner?
Gracias.

Código (java) [Seleccionar]
import java.util.*;

public class Hello1 {
   public static void main (String args[]) {
    Scanner Teclado= new Scanner(System.in);
    String sName = "", sRet= "";
    char cAsig;
   
    for (int x=0; x<131; x++ ){
    System.out.println("Introduce nombre del profesor:");
    sName= Teclado.nextLine();
   
           System.out.flush();
           
    do {
    System.out.println("Introduce el carácter correspondiente a su tipo de enseñanza:");
    cAsig= Teclado.next().charAt(0);
   
    switch (Character.toLowerCase(cAsig)){
    case 's': sRet="Secundaria"       ; break;
    case 'b': sRet="Bachiller"        ; break;
    case 'c': sRet="Ciclo Formativos" ; break;
    default :
    System.out.println("Error\nSolo se aceptan los caracteres 's', 'b' y 'c'\n");
    sRet="";
    }
    } while (sRet == "");
   
    System.out.println(sName + " es profesor de " + sRet + "\n");
    }
   }
}


DoEvents! :P
#37
Java / [SRC] isPrime
22 Noviembre 2011, 20:53 PM
La mejor forma que se me ocurre de hacerlo:

Código (java) [Seleccionar]
    public static boolean isPrime(int iNum) { // La forma más rápida que se me ocurre
    if (iNum > 1) {
    if (iNum < 6){
    if (iNum == 2 || iNum == 5 || iNum == 3)
    return true;
    } else if (((iNum & 1) == 1) && ((iNum % 10) != 5)) {
long lRaiz = (long) Math.sqrt(iNum);
long x;

for (x=3; x <= lRaiz; x += 2){
if ((iNum % x) == 0)
return false;
};

return true;
    }
    }
    return false;
    }


DoEvents! :P
#38
Java / [SRC] decimalToRomano
22 Noviembre 2011, 20:05 PM
Llevo muy poco en java, avisadme si veis algún error o algo mejorable, a ver que os parece:

Código (java) [Seleccionar]
import java.util.*;

public class Hello {
public static String repeatString(String sText, int iTimes){
return new String(new char[iTimes]).replace("\0", sText);
}

public static String decimalToRomano(int iNum) {
int iTmp= 0, i= 1;
String sRet= "";

String [] [] sRDigit =
{
{"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"},
{"X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"},
{"C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"}
};

if (iNum > 0){
for (int x=0; x<3; x++){
iTmp=iNum % (i * 10);

if (iTmp != 0)
sRet= sRDigit[x][(iTmp / i) -1] + sRet;

iNum -= iTmp;

if (iNum == 0)
return sRet;

i *= 10;
};

sRet= repeatString("M", iNum / 1000) + sRet;
};

return sRet;
}
   
public static void main (String args[]) {
System.out.println("Dame un numero mayor que cero para convertirlo a un numero romano:");
   
int iMyNum = new Scanner(System.in).nextInt();
System.out.println("El numero "+ iMyNum + " en romano es: " + decimalToRomano(iMyNum));
}
}


DoEvents! :P
#39
Código (vb) [Seleccionar]
Public Function DeleteString(ByVal sString As String, ByVal PosComienzo As Long, ByVal Longitud As Long) As String

Ej:
Hola hoy estoy cansado

Call Recortar(s, 4, 4)

Hola estoy cansado

Vale todo el más rápido gana.

DoEvents! :P
#40
Mi nueva clase para concatenar cadenas rápidamente (no incluye la opción de insertar/remover cadenas por ahora...):
Código (vb) [Seleccionar]

Option Explicit
Option Compare Binary
'====================================
' º Name      : cConcatenator.cls
' º Version   : 1.3
' º Author    : Psyke1
' º Twitter   : @SoyAbsurdo
' º Country   : Spain
' º Date      : 15/10/11
' º Visit     :
'    * http://foro.h-sec.org
'    * http://infrangelux.sytes.net
'====================================
Private Declare Sub RtlMoveMemory Lib "ntdll.dll" (ByVal lpDestination As Long, ByVal lpSource As Long, ByVal Length As Long)
Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal oleStr As Long, ByVal BLen As Long) As Long

Private sRet()                  As String
Private lCount                  As Long
Private lChunk                  As Long
Private lTotalLenB              As Long

Public Static Sub Append(ByRef sText As String)
Dim lLenB                       As Long
   
    lLenB = LenB(sText)
    If lLenB Then
        If lCount > lChunk Then
            lChunk = lChunk + lChunk + 1&
            ReDim Preserve sRet(lChunk) As String
        End If

        sRet(lCount) = sText
        lCount = lCount + 1&
        lTotalLenB = lTotalLenB + lLenB
    End If
End Sub

Public Static Property Get LengthString() As Long
    LengthString = LengthString \ 2&
End Property

Public Sub ResetAll()
    lCount = 0&
    lTotalLenB = 0&
End Sub

Public Static Property Get GetString() As String
Dim pDest                       As Long
Dim lLenBItem                   As Long
Dim Q                           As Long

    If lCount Then
        RtlMoveMemory VarPtr(GetString), VarPtr(SysAllocStringByteLen(0&, lTotalLenB)), 4&

        pDest = StrPtr(GetString)
        For Q = 0 To (lCount - 1&)
            lLenBItem = LenB(sRet(Q))
            RtlMoveMemory pDest, StrPtr(sRet(Q)), lLenBItem
            pDest = pDest + lLenBItem
        Next Q
    End If
End Property

Private Sub Class_Initialize()
    lChunk = &H270F&
    ReDim sRet(lChunk) As String
End Sub


Test comparándola con cStringBuilderl.cls (la más rápida que encontré en la red):



DoEvents! :P
#41
Programación Visual Basic / vb6 es tonto
2 Octubre 2011, 01:08 AM
Hola chicos, bueno a raíz de una discusión con la profesora de programación he investigado sobre los Ifs de vb6... :rolleyes:

En esta situación:
Código (vb) [Seleccionar]
If A = True Or B = False Then
Lo lógico sería que al leer A=True no comprobara Lo siguiente puesto que la condición se cumpliría de todas formas. :)
Pero no, vb te comprueba TODO el If pase lo que pase en todos los casos. :¬¬

Aquí un código que lo demuestra:

Código (vb) [Seleccionar]
Option Explicit

Private Function OrTest(ByVal bReturn As Boolean) As Boolean
   '// Imprimo un texto para saber que he pasado por la función.
   Debug.Print Time$, "Función con el argumento " & bReturn & " llamada."
   OrTest = bReturn
End Function

Private Sub Form_Load()
   
   '// Aquí lo logico sería comprobar las dos ya que
   '// si la primera no es true, lo puede ser la segunda.
   If OrTest(False) Or OrTest(False) Then
       '// Nothing
   End If
   
   Debug.Print String$(75, "=")
   
   '// Lo lógico sería que se saltase la segunda función puesto
   '// que la primera es true, pero no, nuestro querido vb
   '// comprueba igual...
   If OrTest(True) Or OrTest(False) Then
       '// Nothing
   End If
End Sub


Retorno:
00:27:48      Función con el argumento Falso llamada.
00:27:48      Función con el argumento Falso llamada.
===========================================================================
00:27:48      Función con el argumento Verdadero llamada.
00:27:48      Función con el argumento Falso llamada.




Sé que alguno dirá: ¿y a mí qué más me da si el resultado es el mismo?
Bueno, pues imagina que tienes un If tal que así:

Código (vb) [Seleccionar]

If Calculo(1) Or Calculo(2) Or Calculo(3) Or Calculo(4) Or Calculo(5) Then
    '...
End If

La función Calculo() es un algoritmo complejo y tarda 1 segundo de media.
Si fuera otro lenguaje de programación si Calculo(1) es true se saltaría los demás, pero nuestro querido vb6 llamará a todas las demás funciones perdiendo tiempo innecesariamente... :-\ Pasando de 1 seg a 5 en este caso.
La alternativa que propongo en estos casos es (no son agradables a la vista, aviso :xD) :

Sustituir esto:
Código (vb) [Seleccionar]

   If A(324) = 45 Or B(12) = 2 Or B(4563) = 56 Then
       Call DoIt
   End If


Por esto:
Código (vb) [Seleccionar]

   If A(324) = 45 Then
        Call DoIt
   ElseIf B(12)=2 Then
        Call DoIt
   ElseIf B(4563) = 56 Then
       Call DoIt
    End If


Esto:
Código (vb) [Seleccionar]

   If A(324) = 45 And B(12) = 2 And B(4563) = 56 Then
       '...
   End If


Por esto:
Código (vb) [Seleccionar]

   If A(324) = 45 Then
       If B(12) = 2 Then
           If B(4563) = 56 Then
               '...
           End If
       End If
  End If

Con esto no quiero decir que lo hagáis así de normal, sólo cuando necesitemos velocidad.
Hice estas pruebas a ver si algún lenguaje más era tonto, pero por ahora sólo es vb6.
Si alguien sabe de otro hacedmelo saber, me interesa mucho.
Dedico este articulo a Karcrack, BlackZero, TheSwash y raul338 por orientarme y ayudarme con los test.

VB.NET tiene una expresion para evitar esto:
Short-Circuiting Logical Operations http://msdn.microsoft.com/en-us/library/wz3k228a.aspx

Más info:
http://en.wikipedia.org/wiki/Short-circuit_evaluation

Espero que al menos a alguien le sirva todo esto. :)

DoEvents! :P
#42
Bueno, pues la idea es generar una funcion donde ingresemos la longitud de la cadena y te generara una palabra pronunciable.
Por supuesto deben estar contemplados las combinaciones entre dos consonantes.

Ejemplos falsos:

asdoijs
ouughjt
esrah
wilsohc


Ejemplos verdaderos:
hola
chema
llama
nikos
clueim
tefral


Sin límite de entrega, todo vale... :)

DoEvents! :P
#43
Programación Visual Basic / Verificar celdas...
23 Septiembre 2011, 18:58 PM
Hola buenas, pido vuestra ayuda:
Hay un juego del estilo al biotronic, y al igual que el bioSolver necesito hacer una plantilla que descifre los cuadros que hay debajo.
Para ello pensé hacer 4 GetPixel() por cada celda, si esos cuatro puntos son de un color similar, podré deducir el color de la celda.
El problema es que hay figuras diferentes que no sé como validar:
Este:

O podría confundir estos dos:


¿Alguna idea? ¿Alguna forma mejor de hacerlo?
Tened en cuenta que debe ser algo rápido, se debe actualizar cada 500ms o así... ::)
Igual con el CheatEngine se podría hacer algo, pero a todo el mundo que pregunto me llama loco.
Gracias. :D

DoEvents! :P
#44
Programación Visual Basic / [RETO] Sudoku
21 Septiembre 2011, 20:50 PM
Un reto dificilillo...

Function SolveSudoku_raul338(s() As Byte) As Byte()

Se introduce una matriz bidimensional de 9x9. Los huecos serán "0"
Info
http://es.wikipedia.org/wiki/Sudoku
Vale todo, el más rápido gana.

DoEvents! :P
#45
PHP / [PHP] Problema verificación Twitter
16 Septiembre 2011, 13:46 PM
Perdón... ;D mover esto al foro de PHP... :rolleyes:


Hola, vi por ahí un articulo:
http://blog.timersys.com/tutoriales/actualizar-twitter-a-traves-de-php-y-oauth/
Sigo todos los pasos... pero me tira error...

¿Sabéis qué hago mal?
Puede ser que hallan actualizado la librería twitteroauth.php y ahora haya alguna incoherencia...
Consulté más ejemplos y me tira el mismo error. (Ambos usaban la librería antes citada)
Aún soy n00b en esto, así que gracias por la ayuda. :)

DoEvents! :P